Android 中的ViewModel的使用主要分为3部分
1、创建一个ViewModel类,例如
class MyViewModel: ViewModel(){
private val message:MutableLiveData<String> by lazy{
MutableLiveData<String>().also{
it.postValue("aaaaaaa")
}
}
fun getMessage():LiveData<String>{
return message
}
}
2、获取ViewModel并且添加LiveData数据的监听
val model = ViewModelProviders.of(this)[MyViewModel::class.java]
model.getMessage().observe(this, Observer<String> {
messageTv.text = it
})
3、改变数据
GlobalScope.launch(Dispatchers.Default){
delay(2000)
it.postValue("aaaaaaa")
}
使用比较简单,下面我们来看一下具体调用链
这个是获取ViewModel的整个流程
这个是获取添加观察监听的整个流程
这个是改变数据的整个流程
具体的源码就不说了,可以顺这个时序图去看。
他的主要思路是用观察者模式,将观察者用SafeIterableMap存储,将所有的ViewModel存储在类ViewModelStore(实质是HashMap)。在通知数据更新时结合Lifecycle来判断当前数据所依赖的生命周期状态。