由于 Kotlin JobCancellationException,我崩溃了。
以下是有关崩溃的详细信息:
kotlinx.coroutines.JobCancellationException: Job was cancelled; job=SupervisorJobImpl{Cancelling}@131dbe3
Run Code Online (Sandbox Code Playgroud)
我只知道SupervisorJobImpl是用于 ViewModelScope 的,它会在 ViewModel 生命周期结束时调用方法取消。
我对异常感到很困惑,因为 Kotlin 协程只会忽略异常,但它被抛出并导致应用程序崩溃。如果它有堆栈,我可以弄清楚,但没有,只需告诉我作业已取消。
我在异常上花了大约 3 天多的时间,但不知道。
我看到了视频: KotlinConf 2019:协程!需要把他们全都抓到!作者:Florina Muntenescu & Manuel Vivo,我发现如果范围被取消,如果你在延迟上调用await,它会抛出异常,但我发现取消的范围没有等待。
那么有人可以向我展示一些可能导致相同异常并使应用程序崩溃的代码吗?谢谢,那里。
我正在使用Retrofit以发出一些网络请求。我还将协同程序与“挂起”功能结合使用。
我的问题是:有没有办法改善以下代码。这个想法是并行启动多个请求,并等待它们全部完成,然后再继续执行该功能。
lifecycleScope.launch {
try {
itemIds.forEach { itemId ->
withContext(Dispatchers.IO) { itemById[itemId] = MyService.getItem(itemId) }
}
} catch (exception: Exception) {
exception.printStackTrace()
}
Log.i(TAG, "All requests have been executed")
}
Run Code Online (Sandbox Code Playgroud)
(请注意,“ MyService.getItem()”是一个“暂停”函数。)
我猜在这种情况下,有什么比foreach更好的了。
有人有主意吗?