【问题标题】:When to use emit() instead of postValue when using livedata with coroutines将 livedata 与协程一起使用时,何时使用 emit() 而不是 postValue
【发布时间】:2020-05-21 19:57:34
【问题描述】:

我需要从挂起函数的返回值中获取一个 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())
    }

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

【问题讨论】:

  • 如果您编辑问题以显示您尝试比较的代码 sn-ps 可能会有所帮助。

标签: android-livedata kotlin-coroutines android-ktx


【解决方案1】:

如果您所做的只是发出一个值,那么除了一个事实之外,我认为两者之间没有任何显着差异。第二个示例创建一个在配置更改期间保持活动一段时间的 LiveData。这可能没有任何显着的好处。

随心所欲,随心所欲。似乎第二个示例更简单,代码行数更少。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多