【发布时间】:2020-12-03 09:02:31
【问题描述】:
这是我的伪代码。
class ViewModel {
val liveData1: MutableLiveData<String>
private set
val liveData2: MutableLiveData<String>
private set
fun start() {
liveData1.value = "render1"
liveData2.value = "render2"
/**
* I want that a Logcat shows a log like below:
*
* render1 start
* render1 end
* render2 start
* render2 end
*
* but, result was
*
* render1 start
* render2 start
* render1 end
* render2 end
*/
}
}
class Activity {
fun onCreate() {
subscribe()
viewModel.start()
}
fun subscribe() {
viewModel.livedata1.observe(this, Observer {
lifecycleScope.launch {
render1()
}
})
viewModel.livedata2.observe(this, Observer {
lifecycleScope.launch {
render2()
}
})
}
suspend fun render1() {
Log.d("tag", "render1 start")
delay(1000)
Log.d("tag", "render1 end")
}
suspend fun render2() {
Log.d("tag", "render2 start")
delay(1000)
Log.d("tag", "render2 end")
}
}
每次调用“launch”时,似乎启动了一个新的协程。
我想等待更新“livedata2”,直到“livedata1”渲染结束
“livedata1”渲染完成后有什么方法可以更新“livedata2”吗?
(我也必须使用 ViewModel 和 Livedata)
【问题讨论】:
标签: android android-livedata kotlin-coroutines android-viewmodel