Android 监控Activity的生命周期

来源:互联网 发布:一起作业网刷学豆软件 编辑:程序博客网 时间:2024/05/18 03:56

Intro

在实际的开发中可能会有对Activity的生命周期进行监控的需求,如开源的图片加载库Glide就是根据Activity或Fragment的生命周期智能地开始或暂停图片加载任务,那么究竟是如何做到对他们的生命周期进行监控呢?

他们本身也并没有给我们提供类似于setOnLifecycleListener这样的方法,下面本文就为了解决这个问题给出两种方法。

Solution 1

第一种方法是通过分析Glide库源码得到的。

具体的思路如下:

  • 当一个Fragment和一个Activity绑定(attach)之后,他们就共享了生命周期(生命周期方法调用的时机一致),那么我们就可以通过监控Fragment的生命周期来达到对Activity生命周期监控的目的

  • 在对Activity添加Fragment的时候,可以使得这个Fragment不占用Activity中的空间,不进行显示及对触摸事件的监听,类似于HTML中的hidden标签

  • 重写自己添加的Fragment的生命周期方法,实现监控

其中,添加一个占位的Fragment的具体方法是:

  • 获取FragmentManager,通过Activity.getFragmentManagerActivity.getSupportFragmentManager()

  • 调用FragmentManager.beginTransaction().add (Fragment fragment, String tag)添加Fragment,调用该方法默认的是containerViewId = 0,该部分官方API解释如下:

containerViewId int: Optional identifier of the container this fragment is to be placed in. If 0, it will not be placed in a container.

这样就可以添加一个不显示,不获取焦点的Fragment,有了它,我们就可以指定的Activity生命周期进行监控了。
当然监控指定的Fragment生命周期也是一样,因为Fragment和attach的Activity生命周期一致,所以首先可以通过获取该Fragment依存的Activity,使用getActivity()函数,然后就和上面的方法一致进行监控Activity的生命周期就可以指定的那个Fragment的生命周期了。

使用这种方法虽然操作上面麻烦一定,但是具有针对性。

Solution 2

这一种方法是Application类中给出的,需要API 14+。

具体方法很简单,就是通过:
void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)

其中ActivityLifecycleCallbacks的具体声明如下:

public static interface Application.ActivityLifecycleCallbacks  {    void    onActivityCreated(Activity activity, Bundle savedInstanceState)    void    onActivityDestroyed(Activity activity)    void    onActivityPaused(Activity activity)    void    onActivityResumed(Activity activity)    void    onActivitySaveInstanceState(Activity activity, Bundle outState)    void    onActivityStarted(Activity activity)    void    onActivityStopped(Activity activity)}

这里已经可以监测绝大多数的生命周期的回调方法,这种方法大而全,对于应用中的每一个Activity都会监测回调,多少会有一点浪费资源,还是需要根据具体的使用情况选择吧。

0 0
原创粉丝点击