认识ActivityLifecycleCallbacks接口

2019-01-18  本文已影响31人  程序员大耳

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接口有什么用呢?

一些使用场景

1、Android应用前后台切换的判断

2、监测所有Activity生命周期事件代码

3、应用所有Activity集中化管理

4、统计应用每个Activity使用情况

5、比如从桌面进应用的时候,检测某些状态

6、利用ActivityLifecycleCallBack监控app前后台状态切换,实现手势密码即九宫格解锁

7、限制指定Activity的数量

8、控制同一个商品只会有一个ActivitDetail被打开

9、对ActivityLifecycleCallbacks接口的封装,封装应用Activity生命周期管理类

10、优雅的退出应用

11、一些特殊需求的实现,如:断网情况下弹窗提示用户

这个需求想必有很多同鞋遇到的,这里我们不再讨论通过广播来监听网络状态的改变,我们只讨论如何来显示弹窗,大部分做法会在BaseActivity中写上相关弹窗的代码。这里提供另外一种思路:注册registerActivityLifecycleCallbacks回调,可以得到Activity栈顶的activity来显示相关的弹窗。

我的GitHub

点击下载Demo

上一篇下一篇

猜你喜欢

热点阅读