简捷的activity管理类(生命周期监听控制)

    通常我们设计APP退出功能的时候,常常是设计一个基类Activity,基类里定义一个ArrayList,然后程序里所有的activity都继承自该基类,每个子类创建时都去把该子类activity加入到ArrayList,退出activity页面时把该子类activity移除出ArrayList,当需要退出APP时,就是把ArrayList中所有activity依次finish().

    但是,我们程序中通常不只Activity,可能还会存在有些页面需要继承自FragmentActivity实现Fragment功能,这时候基类定义成Activity就不合适了,因为只能有一个父类。可能有人会想,基类定义成FragmentActivity类型不就好了,但是这里有些页面不需要fragment功能,这样继承该父类,会不会对性能有影响(没研究过),而且总感觉怪怪的。

    那么有木有其它方法呢?恰好最近看到一种写法,可以分享一下

在application类中实现所有功能,首先还是将所有activity用ArrayList管理起来

//activity的列表,用于管理程序所有的activity
private List<Activity> activityList;

/**
 * 初始化activityList
 */
public void initActList(){
    activityList = Collections.synchronizedList(new ArrayList<Activity>());
    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            //Log.i(TAG, "create");
            activityList.add(activity);
        }

        @Override
        public void onActivityStarted(Activity activity) {
            //Log.i(TAG, "start");
        }

        @Override
        public void onActivityResumed(Activity activity) {
            //Log.i(TAG, "resume");
        }

        @Override
        public void onActivityPaused(Activity activity) {
            //Log.i(TAG, "pause");
        }

        @Override
        public void onActivityStopped(Activity activity) {
            //Log.i(TAG, "stop");
        }

        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            //Log.i(TAG, "SaveInstanceState");
        }

        @Override
        public void onActivityDestroyed(Activity activity) {
            Log.i(TAG, "destroy " + activity.getLocalClassName());
            activityList.remove(activity);
        }
    });
}

然后是关闭activity的方法

/**
 * 关闭APP,此方法用于解决52443,某些情况下不能正常完全退出APP
 */
public void closeApp(){
    Iterator<Activity> iterator = activityList.iterator();
    while (iterator.hasNext()){
        Activity activity = iterator.next();
        activity.finish();
        iterator.remove();
    }
    activityList.clear();
}

在application类的oncreate()中调用initActList(),然后在需要关闭APP的地方调用closeApp()。经验证,即使使用的FragmentActivity作为父类,依然可以正确的进行管理监听,而且此方法的好处还在于不用写基类。



猜你喜欢

转载自blog.csdn.net/u010452083/article/details/79579338