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. android2.2资源文件详解4--menu文件夹下的菜单定义
  3. Android 自定义组件 方法篇
  4. android 自定义导航控件
  5. 自定义带倒影和偏转的超炫Gallery
  6. Android 自定义view画圆
  7. 自定义控件attrs文件里的属性
  8. Android之自定义ListView滚动条样式
  9. 自定义ProgressBar的样式失效

随机推荐

  1. 使用内部(com.android.internal)和隐藏(@
  2. 支付宝登录接入(Android/IOS(swift)/Java
  3. android相对布局中@id和@+id的区别(原理)
  4. 游戏移植的注意事项
  5. Android最佳性能实践(四)——布局优化技
  6. 从Eclipse到Android(安卓)Studio经历
  7. android 显示gif图片实例详解
  8. android 和云计算
  9. 如何脱离Android源码环境编译aapt
  10. android listview 一行高亮