lifecycle-livedata-ktx中提供了通过Builder创建LiveData的方式, 可以方便的配合suspend函数的调用。

引入livedata-ktx


implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-rc03"

不使用 LiveData Builder


ViewModel

 // 定义MutableLiveData    val data = MutableLiveData<Repos>()    // 方法定义    fun getRepos() {        viewModelScope.launch {            try {                // 通过suspend函数 请求API                val repos = api.getRepos()                // 通过postValue更新livedata                data.postValue(repos)            }            catch (e: Exception) {                ...            }        }    }

MainActivity

 // 定义ViewModel    private val viewModel: ViewModel by viewModels()    override fun onCreate(savedInstanceState: Bundle?) {        ...        // 调用ViewModel        viewModel.getRepos()        // 订阅livedata        viewModel.data.observe(this, Observer {            // 响应处理        })    }

使用 LiveData Builder


ViewModel

// LiveData Builder    val data: LiveData<Repos> = liveData {        try {            val repos = api.getRepos()              emit(repos) // 通过emit()更新livedata        }        catch (e: Exception) {            ...        }    }    // fun getRepos() 不必定义getRepos()

MainActivity

  // 定义viewModel    private val viewModel: ViewModel by viewModels()    override fun onCreate(savedInstanceState: Bundle?) {        ...        // 订阅livedata        viewModel.data.observe(this, Observer {            // 响应处理        })    }

使用Builder后,可以在定义LiveData的同时实现更新逻辑,Activity中也不必再显式调用getRepo,代码得到精简。那liveData { ... }是什么时候执行的呢?答案是在livedata被observe的时候。

另外,以前必须定义MutableLiveData以方便setValue,使用Builder后无需再依赖MutableLiveData,降低了对外暴露Mutable类型的风险。

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Titanium 使用刘明星的Jpush module做android端的消息推送
  6. android.support.v7使用,出错处理
  7. android 中使用TextView实现分段显示不同颜色的字符串
  8. 安卓(android)使用GPS,获取经纬度
  9. APIDEMO PREFERENCE 学习 ACTIVTIY

随机推荐

  1. mysql sql语句性能调优简单实例
  2. Python3.6-MySql中插入文件路径,丢失反斜
  3. windows下mysql 5.7版本中修改编码为utf-
  4. Workbench通过远程访问mysql数据库的方法
  5. Centos7下MySQL安装教程
  6. Linux服务器中MySQL远程连接的开启方法
  7. centos7.3 安装mysql5.7.18的详细教程
  8. Mysql中基本语句优化的十个原则小结
  9. mysql5.7 修改用户初始密码的方法
  10. 阿里云 Centos7.3安装mysql5.7.18 rpm安