根据已上线的app里总结出来的实用小技巧
当你在项目中觉得自己的Activity过多不好管理时, 你可以尝试写一个ActivityCollector来管理#####
创建一个ActivityCollector类, 声明一个静态的Activity集合, 用来存储创建的Activity
public static List<Activity> activitys = new ArrayList<Activity>();
这个方法需要写到BaseActivity的onCreate,才能实现已创建的Activity添加到集合的功能
调用方式ActivityCollector.addActivity(this);
public static void addActivity(Activity activity) {
activitys.add(activity);//把传入的Activity添加到List中
}
- 这个方法需要写在BaseActivity的onDestroy里
调用方式ActivityCollector.removeActivity(this);
public static void removeActivity(Activity activity) {
activitys.remove(activity);//根据传入的Activity来删除
}
- 这个方法需要写在MainActivity(app主页Activty)的onDestroy里, 当主页Activity销魂或退出时, finish掉集合里的所有Activity
调用方式ActivityCollector.removeAll();
public static void removeAll() {
for (Activity activity : activitys) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
-
当你觉得你的app的当前情况只需要哪一个或者几个Activity的时候使用, 屡试不爽
isAssignableFrom()是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口。
调用方式:
ActivityCollector.removeAll(MainActivity.class);
//除了MainActivity(app主页), 其他的全部关闭
ActivityCollector.removeAll(MainActivity.class, LoginActivity.class);
//除了MainActivity(app主页)、LoginActivity登录页其他的全部关闭
/**
* 除了传来的Activity其他的全部删除
* 可以传多个Activity
* @param clazz
*/
public static void removeAll(Class<?>... clazz) {
boolean isExist = false;
for (Activity act : activitys) {
for (Class c : clazz) {
if (act.getClass().isAssignableFrom(c)) {
isExist = true;
break;
}
}
if (!isExist) {
if (!act.isFinishing()) {
act.finish();
}
} else {
isExist = false;
}
}
}
-
当你在一个Activity想获取另一个Activity(未finish过)的实例时使用
使用方式MainActivity mainActivity = (MainActivity) ActivityCollector.getActivity(MainActivity.class);
//获取MainActivity的实例
/**
* 从Activity集合查询, 传入的Activity是否存在
* 如果存在就返回该Activity,不存在就返回null
* @param activity 需要查询的Activity, 比如MainActivity.class
* @return
*/
public static Activity getActivity(Class<?> activity) {
for (int i = 0; i < activitys.size(); i++) {
// 判断是否是自身或者子类
if (activitys.get(i).getClass().isAssignableFrom(activity)) {
return activitys.get(i);
}
}
return null;
}