当前位置: 首页 > news >正文

Android ProcessLifecycleOwner 观察进程生命周期

文章目录

  • 简介
  • 使用
    • 依赖
    • 用法1,结合 LiveData
    • 用法2,获取 owner的 lifecycle 实例,并对 lifecycle 添加观察者

简介

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

  1. Lifecycle.Event.ON_CREAT 事件 在进程启动后,会收到一次;
  2. Lifecycle.Event.ON_DESTROY 事件,永远不会收到;
  3. 首个 activity 的 onStart , onResume 后,owner 会收到 同类型的事件 Lifecycle.Event.ON_START, Lifecycle.Event.ON_RESUM;
  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) {Lifecycle.State.STARTED, Lifecycle.State.RESUMED, Lifecycle.State.CREATED -> {...}else -> {}}
})

要注意的是,Lifecycle.State 和 Lifecycle.Event 内的常量不是一一对应的

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

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

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

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

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_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 -> {}}}
})
http://www.lryc.cn/news/7811.html

相关文章:

  • 如何编写一个 npm 插件?
  • mapstruct- 让VO,DTO,ENTITY转换更加便捷
  • IAR警告抑制及还原
  • 工厂模式(Factory Pattern)
  • JavaScript语法学习--《JavaScript编程全解》
  • linux安装极狐gitlab
  • 软考高级信息系统项目管理(高项)原创论文——人力资源管理
  • Java Lambda表达式 匿名内部类 函数式接口(FunctionalInterface)
  • javaEE 初阶 — 流量控制与拥塞控制
  • HTML自主学习 - 2
  • 【转载】通过HAL库实现MODBUS从机程序编写与调试-----STM32CubeMX操作篇
  • 【C++】string类(上)
  • Java泛型
  • 07 分布式事务Seata使用(2)
  • c++练习题5
  • Python 高级编程之正则表达式(八)
  • pynrrd常用操作解析
  • 数据结构:链表基础OJ练习+带头双向循环链表的实现
  • 计算机视觉方向地理空间遥感图像数据集汇总
  • 信息系统项目管理师真题精选(一)
  • 信息系统项目管理师刷题知识点(持续更新)
  • RabbitMq及其他消息队列
  • Toolformer: Language Models Can Teach Themselves to Use Tools
  • 悲观锁与乐观锁
  • LeetCode 25. K 个一组翻转链表
  • 朗润国际期货招商:历次科技风头下巨头的博弈
  • 配置中心Config
  • 【原创】java+jsp+servlet学生信息管理系统(jdbc+ajax+filter+cookie+分页)
  • 链表题目总结 -- 回文链表
  • JAVA集合之List >> Arraylist/LinkedList/Vector结构