1.前言对于一个Activity来说,它有一个固定的生命周期,但这只是对Activity本身的一种管理。如果需要管理app中所有activity的生命周期,需要单独处理。这时候就可以使用Androidlevel14(Android4.0)新增加的API,AndroidLifecycleCallbacks可以统一管理当前进程中的所有Activity。2、什么是AndroidLifecycleCallbackAndroidLifecycleCallback是Android4.0新增的API,是Application中的一个公共接口。要使用它,它还需要与Application对象一起使用。AndroidLifecycleCallbacks既然全局管理了Activity的生命周期,自然需要对应Activity的所有生命周期方法。可以看到,这里的AndroidLifecycleCallback是一个接口,我们需要去实现它。并通过registerActivityLifecycleCallbacks()方法,将其注册到当前Application对象中,在不需要时调用unregisterActivityLifecycleCallbacks()注解。从注册和注解的方法实现可以看出,其实是通过一个ArrayList数组维护的,mActivityLifecycleCallbacks,也就是说我们可以在Application对象上添加多个Callbacks监听器。具体什么时候使用完全取决于Application的一些方法。以Activity.onCreate()的监听为例。这里就是把Callbacks取出来,循环调用相应的方法。3、适用场景比如何使用更重要。其实AndroidLifecycleCallback的API很简单,使用起来也不复杂。因此,在什么场景下使用比如何使用更重要。一些常见的使用场景:1、给页面添加统计如果需要为每个页面添加页面PV、UV等统计,除了在每个Activity对应的语句循环方法中添加统计外,可以使用AndroidLifecycleCallbacks统一添加便于管理。2.一键退出所有页面既然可以管理所有的活动,当然可以实现一键退出所有活动的功能。3、判断当前App是否在前台对于退出到后台的App,肯定有一个Activity走到onPause(),几乎没有其他Activity同时走到onResume()。最简单的实现是在onActivityPaused()期间使用Handler做延时判断。如果有另一个Activity立即到达onActivityResume(),则移除延迟消息。否则视为退回后台。4.LifecycleCallback有什么缺陷其实ActivityLifecycleCallbacks整体来说是非常方便实用的。但是它也有一些缺陷,比如Api限制,无法监控Fragment的生命周期等等。这里简单提一下解决这些问题的简单方法,就不举例了。由于需要兼容Android4.0以下的设备,而这个只是用来监控Activity的生命周期,其实我们可以使用一个Activity的父类,让项目中的所有Activity都继承自它。这样的话,在this父类中相应的声明循环方法中,只分发相应的监听回调即可。Fragment生命周期的监控也是如此。如果这一切实现起来有点麻烦,可以参考一个开源项目:https://github.com/soarcn/AndroidLifecyle其实它的思路和上面说的是一样的,只是封装的多了使用方便。需要的话可以阅读源码。5.总结能够监控所有活动的状态是一件非常有意义的事情。它能实现什么功能需要根据实际需要和我们的想象。【本文为专栏作家“张扬”原创稿件,转载请微信♂联系作者获得授权】点此查看作者更多好文
