Android ViewModel使用与源码解析

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来判断当前数据所依赖的生命周期状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值