首页 > 解决方案 > 将 livedata 与协程一起使用时,何时使用 emit() 而不是 postValue

问题描述

我需要从挂起函数的返回值中获取 liveData。为了这 -

  1. 我可以启动一个协程(例如使用 viewmodelScope)并使用 postValue 来更新一个 MutableLiveData 实例。
val apiLiveData = MutableLiveData<MenuItem?>()
fun getLiveData(): LiveData<MenuItem?> {
        viewModelScope.launch {
             apiLiveData.postValue(Repository.getMenuItem())
        }
        return apiLiveData
}
  1. 我可以使用 livedata {} 并发出挂起函数的返回值。
val apiLiveData: LiveData<MenuItem?> = liveData {
        emit(Repository.getMenuItem())
    }

我应该使用上述哪种方法?

标签: android-livedatakotlin-coroutinesandroid-ktx

解决方案


如果你打算只用一个 emit() 来制作一个 liveData,那么你最好选择选项 1,因为它会用更少的样板来做同样的事情。


推荐阅读