ViewModel的作用
MVVM框架的主要组件
ViewModel一般跟LiveData组合使用
(1)将activity, fragment里关于数据操作的逻辑抽离出来,封装到ViewModel中,所以ViewMoel 持有一个成员变量LiveData<T>。
(2)数据的操作包括什么呢? a. 从DB和缓存读取数据,显示到UI; b. 通过网络到后台拉取数据,持久化到本地,更新DB和缓存,通知UI刷新。
(3)因此ViewModel 应该持有一个 成员变量Repository(相当于一个管理类, 命名可以命名为其他如XXXManager),做(2)的事情。 而组件activity, fragment应该持有一个成员变量ViewModel , 如图所示
ViewModel优点
1. 当横竖屏发生切换时,activity会重建,但是ViewModel不需要重建。
2. ViewModel可以避免内存泄漏问题,Activity destroy时会调用ViewModel的onCleared()方法。
3. 可以解决同一个Activity的不同Fragment的数据共享问题。
ViewModel 原理学习总结
ViewModel的创建自然是由ViewModelProvider创建的。
【ViewModelProvider】一两句话总结
1) ViewModelProvider持有两个成员变量 ViewModerStore ——存储(缓存)ViewModel 和 Factory —— 创建ViewModel。
因此了解ViewModelProvider 的职责——可以把它看成一个wrapper——打包了创建ViewModel和存储ViewModel的功能。
public class ViewModelProvider {