我看过很多例子,当viewmodel被破坏时,使用job作为取消coroutine的方法。
class SetupViewModel : ViewModel() {
private val completableJob = Job()
private val coroutineScope = CoroutineScope(Dispatchers.IO + completableJob)
override fun onCleared() {
super.onCleared()
completableJob.cancel()
}
}
对我来说,奇怪的是,似乎没有人使用coroutineScope来做这件事。我想这应该更简单,而且代码更少。有什么好办法吗?
class SetupViewModel : ViewModel() {
private val coroutineScope = CoroutineScope(Dispatchers.IO)
override fun onCleared() {
super.onCleared()
coroutineScope.cancel()
}
}
简单的方法,你可以使用 lifecycle-viewmodel-ktx
并使用 viewModelScope
已经由库定义,你不需要覆盖掉 onCleared
, 阅读更多 此处
我想你的方法其实是正确的。具体的问题是什么?