1.BaseActivity
创建一个BaseActivity类继承AppCompatActivity类用来写所有活动公共的方法,方便更好的管理活动。当创建其他活动时直接继承BaseActivity。公共方法就比如活动启动时打印类名,这样在阅读别人代码时不至于找不到对应的活动。
/**
* create by 星航指挥官
* create on 2020/8/25
* 我为天帝 当镇压世间一切敌
* 遮天
*/
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//打印类名,用于判断是哪一个活动启动
Log.d("BaseActivity",getClass().getSimpleName());
}
}
2.ActivityCollector
如果我们想要退出程序,而此时的返回栈里面又不止一个活动,那么我们需要不止一次的点击返回键才能彻底退出,这样的体验并不良好。我们可以创建一个ActivityCollector 类来一键退出所有活动。
/**
* create by 星航指挥官
* create on 2020/8/25
* 我为天帝 当镇压世间一切敌
* 遮天
*/
public class ActivityCollector {
//创建活动集合
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();
}
}
在ActivityCollector 中,我们通过一个List来暂存活动,提供了addActivity()方法向List中添加新活动,remove()方法移除销毁的活动,此外还有finishAll()方法销毁List中的所有活动。
当然了,要想ActivityCollector 起作用,我们需要在BaseActivity中添加以下代码:
/**
* create by 星航指挥官
* create on 2020/8/25
* 我为天帝 当镇压世间一切敌
* 遮天
*/
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//打印类名,用于判断是哪一个活动启动
Log.d("BaseActivity",getClass().getSimpleName());
//当活动创建时,添加到活动管理器中
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//当活动被销毁时,从活动管理器中移除
ActivityCollector.removeActivity(this);
}
}
BaseActivity中调用了ActivityCollector的addActivity()方法和removeActivity()方法实现了List集合中活动的自动添加和移除,但是想要一键销毁所有活动,我们还需要在合适的地方调用finishAll()方法。比如在"退出程序"按钮的点击事件中调用:
ActivityCollector.finishAll();
kee