当前位置: 首页 > 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 -> {}}}
})

相关文章:

Android ProcessLifecycleOwner 观察进程生命周期

文章目录简介使用依赖用法1,结合 LiveData用法2,获取 owner的 lifecycle 实例,并对 lifecycle 添加观察者简介 ProcessLifecycleOwner 直译,就是,进程生命周期所有者。 通过 DOC 注释了解到: Lifecycle.E…...

如何编写一个 npm 插件?

提到写 npm 插件,很多没搞过的可能第一感觉觉得很难,无从下手,其实不然。 我们甚至写个简单的 console.log(hello word),都是可以当成一个插件发布上去的。 其实无从下手的主要难点还是在于你的具体要做的功能逻辑,这…...

mapstruct- 让VO,DTO,ENTITY转换更加便捷

mapstruct- 让VO,DTO,ENTITY转换更加便捷 1. 简介 MapStruct是一个代码生成器,简化了不同的Java Bean之间映射的处理,所谓映射指的就是从一个实体变化成一个实体。例如我们在实际开发中,DAO层的实体和一些数据传输对…...

IAR警告抑制及还原

工作中需要临时抑制 警告 Pa084,源代码如下: sy_errno_t sy_memset_s(void *dest, sy_rsize_t dmax, int value, sy_rsize_t n) { sy_errno_t err; if (dest NULL) { return SY_ESNULLP; } if (dmax > SY_RSIZE…...

工厂模式(Factory Pattern)

1.什么是工厂模式 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 2.工厂模式的作用 实现创建者和调用者的分离 3.工厂模式的分类 简单工厂模式工厂方法模式抽象工厂模式 4.工厂模式的优缺点 优…...

JavaScript语法学习--《JavaScript编程全解》

《JavaScript编程全解》 JavaScript琐碎基础 0.前言 1.RN: react native是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 React 在原生移动应用平台的衍生产物,支持iOS和安卓两大平台。 2.ts与js js:是弱…...

linux安装极狐gitlab

1. 官网寻找安装方式 不管我们使用任何软件,最靠谱的方式就是查看官方文档。gitlab提供了相应的安装文档,并且有对应的中文文档。地址如下: https://gitlab.cn/install/ 我在这里以CentOS作为安装示例,大家可根据自己的需要选择…...

软考高级信息系统项目管理(高项)原创论文——人力资源管理

人力资源管理 某市某国有装备制造公司智能安防信息管控平台项目是在公司推进企业信息化进程和实现企业可持续发展的背景下于2016年8月提出来的,我公司积极应标并最终顺利中标,而我有幸被任命为项目经理,担任起该项目的管理工作。该项目投资金额为530万元,其中软件部分为360…...

Java Lambda表达式 匿名内部类 函数式接口(FunctionalInterface)

Java Lambda表达式定义背景示例匿名类实现Lambda表达式实现对比匿名类和Lambda实现Lambda表达式(调用)说明Lambda表达式的语法Java 1.8 新特性:函数式接口jdk 1.8 自带的函数式接口 (举例)定义 参考Oracle官网&#x…...

javaEE 初阶 — 流量控制与拥塞控制

文章目录1. 流量控制2. 拥塞控制TCP 工作机制:确认应答机制 超时重传机制 连接管理机制 滑动窗口 1. 流量控制 流量控制是一种干扰发送的窗口大小的机制,滑动窗口,窗口越大,传输的效率就越高(一份时间,…...

HTML自主学习 - 2

一、表格 基本语法 <table><tr><td>单元格内容1</td><td>单元格内容2</td><td>单元格内容3</td></tr></table> 1、<table> </table>标签用于定义表格 2、<tr> </tr>标签用于定义表格的…...

【转载】通过HAL库实现MODBUS从机程序编写与调试-----STM32CubeMX操作篇

通过HAL库实现MODBUS从机程序编写与调试-----STM32CubeMX操作篇[【STM32】RS485 Modbus协议 采集传感器数据](https://blog.csdn.net/qq_33033059/article/details/106935583)基于STM32的ModbusRtu通信--ModbusRtu协议(一)基于STM32的ModbusRtu通信--终极Demo设计(二)STM32RS48…...

【C++】string类(上)

文章目录1.为什么要学习string类2.标准库中的string类1.string分类2.string类对象的常见构造1.string3. string类对象的容量操作1.size2.capacity3.reserve4.resize扩容初始化删除数据4. string类对象的修改操作1.push_back2.append3.operator1.为什么要学习string类 c语言的字…...

Java泛型

文章目录一、泛型介绍1. 背景2. 概念3. 好处二、泛型声明泛型类型符号泛型声明方式三、类型擦除1. 什么是类型擦除桥接方法2. 为何需要类型擦除3. 类型信息并未完全擦除四、泛型使用1. 泛型类2. 泛型接口3. 泛型方法五、泛型扩展1. 泛型的上下边界泛型的上边界泛型的下边界2. 泛…...

07 分布式事务Seata使用(2)

1、Seata是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本的GTS&#x…...

c++练习题5

5.在C语言中&#xff0c;程序运行期间&#xff0c;其值不能被改变的量叫 常量 。 6.符号常量是指用一个符号名代表一个常量。 7&#xff0e;整型常量和浮点型常量也称为 数值常量 &#xff0c;它们有正负之分。 9&#xff0e;在C中&#xff0c;变量是 其值可以改变的量 。 …...

Python 高级编程之正则表达式(八)

文章目录一、概述二、正则表达式语法1&#xff09;字符匹配2&#xff09;字符集合3&#xff09;定位符4&#xff09;分组1、定义分组2、引用分组3、命名分组三、Python 的 re 模块1&#xff09;re.match() 方法2&#xff09;re.search() 方法3&#xff09;re.match() 与 re.sea…...

pynrrd常用操作解析

目录依赖安装官方文档常用操作1. 读部分nrrd.read()nrrd.read_header()nrrd.read_data()2. 写部分nrrd.write()依赖安装 pip install pynrrd官方文档 https://pynrrd.readthedocs.io/en/stable/ 常用操作 1. 读部分 nrrd.read() nrrdpath "your nrrd file path"…...

数据结构:链表基础OJ练习+带头双向循环链表的实现

目录 一.leetcode剑指 Offer II 027. 回文链表 1.问题描述 2.问题分析与求解 (1) 快慢指针法定位链表的中间节点 (2) 将链表后半部分进行反转 附:递归法反转链表 (3) 双指针法判断链表是否回文 二.带头双向循环链表的实现 1.头文件 2.节点内存申请接口和链表初始化接口…...

计算机视觉方向地理空间遥感图像数据集汇总

文章目录1.DSTL卫星图像数据集/Kaggle竞赛2.Swimming Pool and Car Detection/Kaggle竞赛3.SpaceNet Challenge 3数据集4.RarePlanes数据集5.BigEarthNet数据集6.NWPU VHR-10数据集7.UC Merced Land-Use数据集8.Inria Aerial Image Labeling数据集9.RSOD数据集1.DSTL卫星图像数…...

观察Taotoken在多模型同时高并发调用下的服务表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken在多模型同时高并发调用下的服务表现 在构建依赖大模型能力的应用时&#xff0c;一个常见的工程挑战是如何应对突发的…...

DeFi预测市场套利机器人:延迟套利与结构性对冲策略详解

1. 项目概述&#xff1a;在2.7秒的缝隙中寻找确定性如果你在DeFi世界里寻找一种“低风险、高确定性”的套利机会&#xff0c;那么Polymarket这类预测市场可能是一个被低估的宝藏。这个项目&#xff0c;genoshide/polymarket-arbitrage-trading-bot&#xff0c;本质上是一个高度…...

FPGA单粒子翻转(SEU)原理、影响与防护策略全解析

1. 是什么在“骚扰”我的FPGA&#xff1f;——深入解析单粒子翻转作为一名在电子设计领域摸爬滚打了十几年的工程师&#xff0c;我经手过不少高可靠性的项目&#xff0c;从地面通信基站到近地轨道的载荷设备都有涉及。在这些项目中&#xff0c;有一个幽灵般的问题总是如影随形&…...

从五管OTA到两级运放:在Cadence IC617中如何规划你的设计指标与晶体管尺寸(gm/id方法详解)

从五管OTA到两级运放&#xff1a;gm/id设计方法在Cadence IC617中的策略性应用 在模拟集成电路设计中&#xff0c;运算放大器的设计始终是工程师面临的核心挑战之一。特别是当设计需求从简单的五管OTA扩展到更复杂的两级运放时&#xff0c;设计者需要处理的不仅仅是晶体管尺寸的…...

LightGBM参数太多不会调?一份针对分类问题的‘避坑’指南与核心参数详解

LightGBM分类任务调参实战&#xff1a;从参数误区到精准优化 第一次接触LightGBM时&#xff0c;我被它琳琅满目的参数列表吓到了——光是官方文档列出的就有80多个可调参数。记得当时为了预测用户流失率&#xff0c;我直接把XGBoost的代码换成LightGBM&#xff0c;结果AUC反而下…...

基于React与Tailwind CSS的轻量级ChatGPT Web界面部署与定制指南

1. 项目概述与核心价值最近在折腾AI应用开发&#xff0c;发现很多朋友都想自己部署一个轻量级的ChatGPT对话服务&#xff0c;但面对动辄几个G的模型和复杂的部署流程就望而却步。直到我发现了blrchen/chatgpt-lite这个项目&#xff0c;它完美地解决了这个问题——一个真正轻量、…...

Cache映射策略全解析:从全相联到组相连,如何平衡灵活性与效率?

1. 为什么需要Cache映射策略&#xff1f; 想象一下你正在图书馆找一本书。如果每次都要从最外层的书架开始一本本翻找&#xff0c;效率肯定低得令人发指。这时候我们会给书籍分类编号——这就是Cache映射策略的日常类比。 在计算机体系结构中&#xff0c;CPU的运行速度远远快于…...

【AI面试临阵磨枪-54】如何监控 AI 系统:成功率、延迟、Token 消耗、幻觉率、调用量

一、 面试题目面试官提问&#xff1a; “在大规模 Agent 系统中&#xff0c;你是如何建立监控体系的&#xff1f;请针对 成功率、延迟、Token 消耗、幻觉率、调用量 这五个核心指标&#xff0c;详细谈谈你的采集、分析与预警方案。”二、 知识储备1. 核心背景&#xff1a;AI 监…...

终极百度网盘加速解决方案:BaiduPCS-Web完整使用指南

终极百度网盘加速解决方案&#xff1a;BaiduPCS-Web完整使用指南 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 还在为百度网盘那令人抓狂的下载速度而烦恼吗&#xff1f;当下载进度条像蜗牛一样缓慢移动时&#xff0c;你是…...

AI时代算力、模型与安全的三角博弈:从Nvidia生态到工程实践

1. 项目概述&#xff1a;当算力、智能与安全交织的时代最近和几个在芯片设计、大模型应用以及安全服务公司工作的朋友聊天&#xff0c;大家不约而同地都聊到了一个话题&#xff1a;我们正处在一个由Nvidia芯片驱动的AI浪潮之巅&#xff0c;但这场盛宴似乎并非没有天花板。一方面…...