MVVM学习之ViewModel

483 阅读1分钟

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