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

更多相关文章

  1. android之解析json数据格式详解
  2. android 本地存取复杂数据
  3. git android 源码 ssl错误, 重新设置即可
  4. Ubuntu 16.04 配置android 源码开发/编译环境
  5. android 系统数据库
  6. Android 源码里packages里面的结构
  7. android ListView 刷新数据,加载时遇到的数组越界问题
  8. Android数据库操作工具类分享
  9. 【30篇突击 android】源码统计 十二

随机推荐

  1. 谷歌发布Skaffold,简化Kubernetes应用程序
  2. TIMESTAMP with implicit DEFAULT value
  3. 代码管理平台SVN
  4. 基于内阻增加和容量衰减双重标定的锂电池
  5. 代码管理平台GIT
  6. 实现错误日志记录
  7. SSH-Agent实现多台机器登陆
  8. 代码管理平台GITLAB
  9. 自动化运维管理平台OpsManage部署
  10. 自动化运维Saltstack