ViewModel
被设计用来保存与UI相关的数据,并且它是可以感知生命周期变化的
// 在系统第一次调用onCreate()方法时创建一个ViewModel,注册一个观察者
MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
model.getUsers().observe(this, users -> {
// 更新UI
});
ViewModel生命周期
在Activity下是在finished的时候,在Fragment下是detached的时候。
ViewModelProviders
其实是ViewModelStore的一个实用类,它在内部引用ViewModelStore返回ViewModel实例(如果存在,否则就创建一个并保存下来)。
ViewModelStore内部使用HashMap跟踪ViewModel
LiveData
是一个可观测的数据持有类,但是不同于通常的被观察者,LiveData 具有生命周期感知能力
- LiveData和LifeCyclerOwner 相互绑定,实现对生命周期的感知
- dispatchValue 判断onActive,只通知active观察者,onInactive不通知
https://www.jianshu.com/p/d66b2fd4d918
LiveData 的优势
确保UI和数据状态匹配。
当数据发生改变的时候,会自动通知UI进行更新。
避免内存泄漏
Observers 是绑定到 Lifecycle 对象上的,当与其关联的 lifecycle 被销毁的时候,它们会自动被清理。
避免了由于 Activity 停止而导致的闪退
当 Observer 所绑定的 Lifecycle 处于非活跃状态时,比如处于返回栈中的 Activity,它将不会收到任何 LiveData 事件。
不再需要手动处理生命周期
UI组件只需要对相关的数据进行监听,不需要关心是否应该暂停或者恢复监听。LiveData 具有生命周期感知能力,它会自动对这些进行管理。
数据总处于最新状态
如果一个 Lifecycle 处于非活跃状态,那当它由非活跃状态变为活跃状态的时候,它将收到最新的数据。比如一个 Activity 由后台转为前台,这时候它将立即收到最新的数据
系统配置更改时,进行数据的保存和恢复,及 UI 的恢复。
当 Activity 或者 Fragment 由于配置更改而重新创建时(比如旋转屏幕等),它将收到最新的可用数据。这里简单提一点,这个有点是需要配合 ViewModel 使用的,严格来说,它主要是 ViewModel 的优点
资源共享
我们可以使用单例模式来扩展 LiveData,这样就能达到数据变化的时候,通知所有的观察者
MediatotLiveData
MutableLiveData
https://github.com/CymChad/BaseRecyclerViewAdapterHelper
BaseQuickAdapter
WorkManager
Android架构组件WorkManager详解
WorkManager对比JobScheduler, AlarmManger的优势:我们要知道虽然AlarmManager是一直存在但是JobScheduler是Android 5.x之后才有的。
WorkManager的底层实现,会根据你的设备API的情况,自动选用JobScheduler, 或是AlarmManager来实现后台任务。
WorkManager对比AsyncTask, ThreadPool的优势:WorkManager里面的任务在应用退出之后还可以继续执行。
AsyncTask, ThreadPool里面的任务在应用退出之后不会执行。
jetpack知识梳理博客
https://www.jianshu.com/p/ee6b81b9777a