Android ProcessLifecycleOwner 观察进程生命周期

ProcessLifecycleOwner是AndroidX库中的一个组件,用于跟踪Android应用的全局进程生命周期。它可以观察到Lifecycle.Event.ON_CREATE和Lifecycle.Event.ON_STOP事件,方便判断应用的前后台状态。文章介绍了如何通过结合LiveData进行数据观察,以及如何直接添加LifecycleObserver来监听进程状态的变化,提供了两种具体的使用方法示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

ProcessLifecycleOwner 直译,就是,进程生命周期所有者。
通过 DOC 注释了解到:

  1. Lifecycle.Event.ON_CREATE 事件 在进程启动后,会收到一次;
  2. Lifecycle.Event.ON_DESTROY 事件,永远不会收到;
  3. 首个 activity 的 onStart , onResume 后,owner 会收到 同类型的事件 Lifecycle.Event.ON_START, Lifecycle.Event.ON_RESUME;
  4. 最后的 Activity 的 onPause、onStop 后, owner 会收到 同类型事件Lifecycle.Event.ON_PAUSE, Lifecycle.Event.ON_STOP (系统保证了收到的事件是正常的,不会在配置更改而销毁和重新创建活动时发送这样的事件)

用于判断进程前后台很方便

其本身是个单例实现,源码:

@NonNull
public static LifecycleOwner get() {
    return sInstance;
}

使用

依赖

api "androidx.lifecycle:lifecycle-process:2.5.1"

用法1,结合 LiveData

数据变化的观察,将依赖于 进程的活动事件

liveData.observe(ProcessLifecycleOwner.get(), Observer {
    when (ProcessLifecycleOwner.get().lifecycle.currentState) {
    	Log.i("ProcessLifecycleOwner", "state: ${ProcessLifecycleOwner.get().lifecycle.currentState}")
        Lifecycle.State.STARTED, Lifecycle.State.RESUMED -> {
           ...
        }
        else -> {}
    }
})

要注意的是,Lifecycle.State 和 Lifecycle.Event 内的常量不是一一对应的
通过测试发现,当应用从后台回到前台时,日志会打印出 “state: STARTED” ;当应用在前台,再改变 liveData 的 value,日志会打印出 “state: RESUMED”

用法2,获取 owner的 lifecycle 实例,并对 lifecycle 添加观察者

ProcessLifecycleOwner.get().lifecycle.addObserver(LifecycleObserver observer) 

查看 LifecycleObserver 的 DOC 注释,建议不要直接使用该类;而是使用其子类 DefaultLifecycleObserverLifecycleEventObserver

示例(可用于判断进程前后台):

ProcessLifecycleOwner.get().lifecycle.addObserver(object: DefaultLifecycleObserver {
    override fun onCreate(owner: LifecycleOwner) {
        super.onCreate(owner)
    }

    override fun onStart(owner: LifecycleOwner) {
        super.onStart(owner)
    }

    override fun onResume(owner: LifecycleOwner) { // 应用前台
        super.onResume(owner)
    }

    override fun onPause(owner: LifecycleOwner) { // 应用后台
        super.onPause(owner)
    }

    override fun onStop(owner: LifecycleOwner) {
        super.onStop(owner)
    }

    override fun onDestroy(owner: LifecycleOwner) {
        super.onDestroy(owner)
    }
})

ProcessLifecycleOwner.get().lifecycle.addObserver(object: LifecycleEventObserver {
    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        when (event) {
        	Lifecycle.Event.ON_CREATE -> {
        		Log.e("ProcessLifecycleOwner", "ON_CREATE")
        	}
            Lifecycle.Event.ON_START -> {
                Log.e("ProcessLifecycleOwner", "ON_START")
            }
            Lifecycle.Event.ON_RESUME -> { // 应用前台
                Log.e("ProcessLifecycleOwner", "ON_RESUME")
            }
            Lifecycle.Event.ON_PAUSE -> { // 应用后台
                Log.e("ProcessLifecycleOwner", "ON_PAUSE")
            }
            Lifecycle.Event.ON_STOP -> {
                Log.e("ProcessLifecycleOwner", "ON_STOP")
            }
            else -> {}
        }
    }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值