Android在开发中的实用技巧之ActivityCollector

根据已上线的app里总结出来的实用小技巧

当你在项目中觉得自己的Activity过多不好管理时, 你可以尝试写一个ActivityCollector来管理#####
  • 创建一个ActivityCollector类, 声明一个静态的Activity集合, 用来存储创建的Activity
    public static List activitys = new ArrayList();

  • 这个方法需要写到BaseActivityonCreate,才能实现已创建的Activity添加到集合的功能
    调用方式ActivityCollector.addActivity(this);

public static void addActivity(Activity activity) {
        activitys.add(activity);//把传入的Activity添加到List中
}
  • 这个方法需要写在BaseActivityonDestroy里
    调用方式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;
    }

你可能感兴趣的:(Android在开发中的实用技巧之ActivityCollector)