简捷的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作为父类,依然可以正确的进行管理监听,而且此方法的好处还在于不用写基类。
但是,我们程序中通常不只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作为父类,依然可以正确的进行管理监听,而且此方法的好处还在于不用写基类。
相关文章推荐
- android Tabhost中,控制activity的生命周期
- ActivityLifecycleCallbacks 如何控制activity的生命周期
- Android初学习 - 在Activity中监听屏幕属性改变用来控制是否全屏(隐去status bar)
- 监听Activity的生命周期
- Glide原理之Activity、Fragment生命周期监听(三)
- Android 监听应用内Activity生命周期
- Preference中如何增加activity生命周期监听
- 【Android】利用Activity生命周期监听应用前后台切换
- RatingBar 在activity中代码控制监听
- Android中ActivityLifecycleCallbacks监听Activity们的生命周期
- 在Activity类之外监听Activity的生命周期
- 监听Android所有Activity的生命周期
- Android 监听应用内Activity生命周期
- 使用registerActivityLifecycleCallbacks实现整个app所有activity生命周期的监听和处理
- android基础知识---ActivityLifecycleCallbacks监听Activity们的生命周期
- Android 使用ActivityLifecycleCallbacks监听自己应用Activity的生命周期
- TabHost中控制activity生命周期
- [置顶] 源码阅读---Activity生命周期控制
- Activity生命周期监听接口:ActivityLifecycleCallbacks
- Activity的生命周期