Android 监控Activity的生命周期

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值