Lifecycle

1.Activity实现了LifecycleOwner被观察者 addObserver添加观察者 map存入观察者
2.LiveData粘性事件是因为添加时当前的version和被观察者的version不一致导致,可通过反射hook的方式修改
3.Activity内部添加了ReportFragment来感知生命周期向观察者发送事件
4.Activity实现了状态机,能够顺序显示和退出 同事同步自己的状态给被观察者
5.LiveData观察者接收事件后再setValue会导致后续的观察者只能收到新的事件
6.postValue本质是切到主线程在setValue 回调在主线程

ViewModel

Boudle作为数据存储,就已经和当前Activity实例没有任何关系了!
存储手段, 表层应用的是一个Hashmap

不受Activity实例影响,
Bundle理解为进程中的共享数据区
Activity继承ComponentActivity在内部通过LifeCycle监听到onSaveInstanceState事件通过mSavedStateRegistryController.performSave(outState)将数据存入到Bundle中
内部通过LifeCycle监听到onDestroy事件通过getViewModelStore().clear()去清除Map中的数据,此处map中放的是ViewModel中的数据
销毁重建走onCreate通过mSavedStateRegistryController.performRestore(savedInstanceState)从Bundle中恢复数据
本质上是Bundle的上层封装,Bundle通过类名去查找数据
本质是两个Activity之间的数据传递,上一个被销毁的Activity与新建的这个Activity建立的Bundle数据传递

WorkManager

1.架构上使用JobServiceManager或AlarmService进行调用执行
2.数据传递上使用Database进行存储
3.执行角度上利用线程池提供具体的执行能力
4.编译完manifest会生成contentProvider 和receiver等

1.WorkManger最大的特色, 是不依赖于当前用户进程
当前用户进行killed,任务能够继续执行
保活! 绝对意义上的保活

2.WorkManager区别于Service提供了一系列的便于我们处理任务的业务
任务链
触发条件执行

WorkManager
1.架构设计
独立于当前APP进程,由第三方进行进行调用
2.业务设计
支持条件约束
支持循环任务
支持任务链

1.底层提供能力的是线程池

2.封装成了一个线性的队列执行

3.当前SDK版本>23的情况下,是由jobservice提供调用支持

4.如果是小于23的情况下是AlarmService提供调用支持!

从创建角度上来将
1.默认会生成CP 作为组件进行注册
1.1. 构建一个线程池提供具体的执行能力
1.2. 根据版本构建JSM 或AlarmService进行调用执行

通过recevier支持各种约束环节!

对应数据直接入了数据库
在使用时,取数据库中的数据提取进行处理


1.架构上用JSM 或AlarmService进行调用执行
2.数据传递上用Database进行存储
3.执行角度利用线程池提供具体执行能力

能不能做保活??


各大手机厂商,对于ROM的系统,隔一段事件 直接一次性清除掉非系统进程的所有进程


WorkManager这东西用不了!
    有时候会失效,就是因为厂商做了处理

ROM厂商定制
    连JMS   ALARMSERVICE

本文地址: http://www.yppcat.top/2022/12/28/jetpack/