《第一行代码》阅读笔记(五)——活动的最佳实践

这一部分,我觉得讲的还是非常好的,在实际开发中用处很大。

知晓当前是在哪一个活动

第一步:创建一个所有Activity的基类BaseActivity

class BaseActivity extends AppCompatActivity {

    private static final String TAG = "BaseActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, getClass().getSimpleName());
    }
}

并不给这个类创建活动,只是一个普通的Java类。然后让其继承AppCompatActivity,并重写onCreate方法,在方法中啥都不干,只是通过日志打印出当前的类名。

第二步:让所有的活动继承BaseActivity

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

因为每个活动都会重写onCreate方法,并且调用父类的onCreate方法,然后就会打印出自己的活动类名。

但是还有一个更加实用的方法,就是在手机上面下载一个App,名字叫“当前Activity”,可以直接在App运行的时候查看当前Activity的类名。

左上角就是包名+类名

随时随地退出程序

因为back就是调用finish函数,只能关闭栈顶的Activity,如果想要直接退出程序怎么办?

第一步:新建一个ActivityCollector类

public class ActivityCollecter {

    public static List<Activity> activities = new ArrayList<>();

    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    public static void finishAll() {
        for (Activity activity : activities
        ) {
            if (!activity.isFinishing()) {
                activity.finish();
            }
            activities.clear();
        }
    }
}

在活动管理器中,我们通过一个List 来暂存活动,然后提供了一个addActivity()方法用于向List中添加一个活动,提供了一个removeActivity()方法用于从List中移除活动,最后提供了一个finishAll()方法用于将List中存储的活动全部销毁掉。

第二步:修改BaseActivity

public class BaseActivity extends AppCompatActivity {

    private static final String TAG = "BaseActivity";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, getClass().getSimpleName());
        ActivityCollecter.addActivity(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollecter.removeActivity(this);
    }
}

在BaseActivity的onCreate()方法中调用了ActivityCollector的addActivity()方法,表明将当前正在创建的活动添加到活动管理器里。然后在BaseActivity中重写onDestroy()方法,并调用了ActivityCollector 的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除。

以后如果需要直接退出程序,直接调用finishAll函数即可

启动活动的最佳写法

这个非常常用,一定要学会

第一步:编写actionStart函数

public class A {
public static void actionStart(Context context, String para1 , String para2) {
        Intent intent = new Intent(context, A.class);
        intent.putExtra("name1", para1);
        intent.putExtra("name2", para2);
        context.startActivity(intent);
    }
...
}

第二步:跳转
A.actionStart(B.this,"para1","para2");

一般actionStart函数都写在那个Activity中,就是跳转到那个Activity。就如上面的例子A活动中写这个方法,这样编写符合人们的惯性思维,也有规范可言。在这类中可以直接通过getExtra()方法来接收打开这个活动传进来的数据,也就是例子中的para1和para2。

当需要跳转到A的时候,直接调用A.actionStart即可,然后依次传入当前环境,和需要的参数。即可

posted @ 2020-07-22 22:50  朱李洛克  阅读(203)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css