【Android】使用LiveData KTX Builder让代码更简洁
16lz
2021-12-04
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类型的风险。
更多相关文章
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- Titanium 使用刘明星的Jpush module做android端的消息推送
- android.support.v7使用,出错处理
- android 中使用TextView实现分段显示不同颜色的字符串
- 安卓(android)使用GPS,获取经纬度
- APIDEMO PREFERENCE 学习 ACTIVTIY