API 14之后(Android4.0),在Application类中,提供了一个应用生命周期回调的注册方法,用来对应用的生命周期进行集中管理,这个方法叫registerActivityLifecycleCallbacks,可以通过它注册自己的ActivityLifeCycleCallbacks,每一个Activity的生命周期都会回调到ActivityLifeCycleCallbacks这里的对应方法。
一、源码分析ActivityLifecycleCallbacks接口
1、我们先看Application中ActivityLifecycleCallbacks接口
Application中ActivityLifecycleCallbacks接口 Activity生命周期从这两张中可以看出两者几乎是一一对应的。
mActivityLifecycleCallbacks:一个ArrayList保存所有注册回调接口实现对象,支持向Application中注册多个ActivityLifecycleCallbacks接口回调
Application中的ActivityLifecycleCallbacks接口注册/注销方法2、ActivityLifecycleCallbacks接口回调的时机在哪?
Application中对ActivityLifecycleCallbacks接口方法的调用方法Application中各种Activity生命周期dispatch相关的方法,那么会在哪里调用这些dispatch方法呢?我们大胆猜测一下在Activity生命周期会回调这些方法,进过层层上溯查找,在Activity.class中发现了调用痕迹。
Activity.class可以看到在Activity.onCreate生命周期方法中调用了getApplication().dispatchActivityCreated(this, savedInstanceState)方法,同理,其它相关生命周期方法的回调也是如此。
到这里,我们就了解了ActivityLifecycleCallbacks接口的回调时机。
二、ActivityLifecycleCallbacks接口有什么用呢?
一些使用场景
2、监测所有Activity生命周期事件代码
3、应用所有Activity集中化管理
4、统计应用每个Activity使用情况
5、比如从桌面进应用的时候,检测某些状态
6、利用ActivityLifecycleCallBack监控app前后台状态切换,实现手势密码即九宫格解锁
8、控制同一个商品只会有一个ActivitDetail被打开
9、对ActivityLifecycleCallbacks接口的封装,封装应用Activity生命周期管理类
10、优雅的退出应用
11、一些特殊需求的实现,如:断网情况下弹窗提示用户
这个需求想必有很多同鞋遇到的,这里我们不再讨论通过广播来监听网络状态的改变,我们只讨论如何来显示弹窗,大部分做法会在BaseActivity中写上相关弹窗的代码。这里提供另外一种思路:注册registerActivityLifecycleCallbacks回调,可以得到Activity栈顶的activity来显示相关的弹窗。
点击下载Demo
网友评论