停止作业显示 JobCancellationException:作业被取消并保持应用冻结崩溃:
我在viewModel中的代码:
private val job = SupervisorJob()
private val uiScope = CoroutineScope(Dispatchers.Main + job)
uiScope.launch {
try {
repeat(152212000001) { it ->
try {
Log.d("Timer : ", it)
delay(1000)
} catch (e: Exception) {
e.printStackTrace()
}
}
} catch (e: CancellationException) {
e.printStackTrace()
}
}
内部ViewModel:
override fun onCleared() {
job.cancel()
super.onCleared()
}
答案 0 :(得分:2)
按照Easy Coroutines in Android: viewModelScope blog post:
viewModelScope
通过向ViewModel类添加structured concurrency来为extension property做出贡献,该类会在销毁ViewModel时自动取消其子协程。
因此,通过添加对androidx.lifecycle:lifecycle-viewmodel-kex:2.1.0-alpha02
(或更高版本)的依赖,默认情况下您就可以使用viewModelScope
来做正确的事情:
viewModelScope.launch {
repeat(152212000001) { it ->
Log.d("Timer : ", it)
delay(1000)
}
}