android-livedata - 将 livedata 与协程一起使用时,何时使用 emit() 而不是 postValue
问题描述
我需要从挂起函数的返回值中获取 liveData。为了这 -
- 我可以启动一个协程(例如使用 viewmodelScope)并使用 postValue 来更新一个 MutableLiveData 实例。
val apiLiveData = MutableLiveData<MenuItem?>()
fun getLiveData(): LiveData<MenuItem?> {
viewModelScope.launch {
apiLiveData.postValue(Repository.getMenuItem())
}
return apiLiveData
}
- 我可以使用 livedata {} 并发出挂起函数的返回值。
val apiLiveData: LiveData<MenuItem?> = liveData {
emit(Repository.getMenuItem())
}
我应该使用上述哪种方法?
解决方案
如果你打算只用一个 emit() 来制作一个 liveData,那么你最好选择选项 1,因为它会用更少的样板来做同样的事情。
推荐阅读
- c# - 线程安全阅读指导两次
- jenkins - npm 错误!EPERM:不允许操作,scandir
- python - 有没有办法根据一个字段(比如说field3)从2个文件(A anb)中获取唯一行,其中A在重复的情况下优先?
- matrix - 方阵的踪迹?
- android - 为什么openGL会阻止UI?
- c++ - 相互依赖的静态库
- spring-integration - setOnFailureExpression 不适用于#root 和#exception
- javascript - 按顺序向上滑动元素
- excel - 将更改源中的单元格值复制到另一个工作表中
- node.js - EmberJS 2.15.1 找不到模块`fullcalendar`