Android ViewModel使用与源码解析

Android 中的ViewModel的使用主要分为3部分

1、创建一个ViewModel类,例如

class MyViewModel: ViewModel(){
    private  val message:MutableLiveData by lazy{
        MutableLiveData().also{
            it.postValue("aaaaaaa")
        }
    }

    fun getMessage():LiveData{
        return message
    }
}

2、获取ViewModel并且添加LiveData数据的监听

val model = ViewModelProviders.of(this)[MyViewModel::class.java]
        model.getMessage().observe(this, Observer {
            messageTv.text = it
        })

3、改变数据

GlobalScope.launch(Dispatchers.Default){
                delay(2000)
                it.postValue("aaaaaaa")
            }

使用比较简单,下面我们来看一下具体调用链

这个是获取ViewModel的整个流程

Android ViewModel使用与源码解析_第1张图片

这个是获取添加观察监听的整个流程

Android ViewModel使用与源码解析_第2张图片

这个是改变数据的整个流程

Android ViewModel使用与源码解析_第3张图片

具体的源码就不说了,可以顺这个时序图去看。

他的主要思路是用观察者模式,将观察者用SafeIterableMap存储,将所有的ViewModel存储在类ViewModelStore(实质是HashMap)。在通知数据更新时结合Lifecycle来判断当前数据所依赖的生命周期状态。

你可能感兴趣的:(Android源码分析,Android进阶)