Hoa*_*yen 3 android kotlin android-architecture-components kotlin-coroutines
是否可以在观察者内部使用协同程序来更新 UI?
例如:
Viewmodel.data.observer(this, Observer{ coroutinescope })
Run Code Online (Sandbox Code Playgroud)
您可以从Observer回调中运行任何您想要的代码。但是启动一个稍后更新 UI 的协程并不是一个好主意,因为当协程完成时,UI 可能会被破坏,这可能会导致抛出异常并使您的应用程序崩溃。
只需直接从Observer回调运行 UI 更新代码。
viewModel.data.observe(this, Observer {
// Update the UI here directly
})
Run Code Online (Sandbox Code Playgroud)
这样你就知道更新时 UI 是活动的,因为LiveData考虑了生命周期this。
如果你想在回调的同时启动一些协程,最好在你的viewModelusing 中进行viewModelScope。
// This triggers the above code
data.value = "foo"
// Now also launch a network request with a coroutine
viewModelScope.launch {
val moreData = api.doNetworkRequest()
// Set the result in another LiveData
otherLiveData.value = moreData
}
Run Code Online (Sandbox Code Playgroud)
请注意,您必须添加依赖项build.gradle才能使用viewModelScope:
dependencies {
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2346 次 |
| 最近记录: |