1. 概念了解
啥是ViewModel?
- 简介:ViewModel是以生命周期的方式存储与管理UI相关数据
- 作用:
- 1、在MVVM模式中,使Model与View分离
- 2、负责为 UI 准备数据
- 3、存储数据
上图,看图有印象
2. 基础知识了解
- ViewModel只会在Activity内存活且只会创建一次。当销毁时,会主动调用onClered。
- 因为在Activity存活时,ViewModel只创建一次,那么在这个Activity下的所有Fragment都可以共享一个ViewModel
- 由于 ViewModel 生命周期可能长于 Activity 生命周期,所以为了避免内存泄漏Google禁止在ViewModel中持有Context或Activity或View的引用。如果必须要使用Context, 可以继承AndroidViewModel 类中获取ApplicationContext
- 之前我们在Activity销毁重建时,可以用Activity的
onSaveInstanceState()机制保存和恢复数据,但缺点明显, 只适合保存少量的可以被序列化、反序列化的数据。假如我们需要保存一个比较大的数据,这个时候ViewModel就可以实现。
创建我们的MyViewModel,继承ViewModel。并重写onCleared()
public class MyViewModel extends ViewModel {
@Override
protected void onCleared() {
super.onCleared();
LogUtils.i("MyViewModel的相关","Activity被杀死后也会被销毁!");
}
}
GITHUB
Activity和XML代码没有列出来,详情可以去MvvmDemo
本文用到的类:ViewModelActivity,MyViewModel