您的位置:首页 > 其它

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

2018-03-16 13:39 411 查看
    通常我们设计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作为父类,依然可以正确的进行管理监听,而且此方法的好处还在于不用写基类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: