gpt4 book ai didi

android - 如何修复 Kotlin JobCancellationException?

转载 作者:行者123 更新时间:2023-12-02 12:08:51 32 4
gpt4 key购买 nike

由于 Kotlin JobCancellationException,我遇到了崩溃。

以下是有关崩溃的详细信息:

kotlinx.coroutines.JobCancellationException: Job was cancelled; job=SupervisorJobImpl{Cancelling}@131dbe3     

我所知道的是 SupervisorJobImpl 用于 ViewModelScope,当 ViewModel 生命周期结束时,它将被称为方法 cancel

我对异常感到非常困惑,因为 Kotlin 协程只会忽略异常,但它被抛出并导致应用程序崩溃。如果它有堆栈,我可以弄清楚,但它没有,只是告诉我工作被取消了。

我花了大约 3 天的时间处理异常,但只是不知道。

我看了视频:
KotlinConf 2019: Coroutines! Gotta catch 'em all! by Florina Muntenescu & Manuel Vivo,我发现如果范围被取消,如果你在Deferred上调用 await ,它会抛出异常,但我发现取消范围上没有 await

那么有人可以向我展示一些可能导致相同异常并使应用程序崩溃的代码吗?谢谢,那里。

最佳答案

最后,我找到了导致异常的原因,并且问题地址正在流动:

kotlin.coroutines.channels.awaitClose: JobCancellationException

实际上,awaitClose不会抛出JobCancellationException , 因为 awaitClose是一个可取消的暂停功能。 offer方法将抛出 JobCancellationException如果作业被取消是因为 offer不是可取消的暂停功能。

顺便说一句,callbackFlow是一个实验性的API,所以可能会引起一些bug,所以我们在使用的时候需要小心。因为它不会总是忽略JobCancellationException当 Job 被取消时,我认为这对开发人员不友好。

现在我发现2种情况会导致JobCancellationException所以我们需要try catch异常(exception)。

  • async await , 当我们调用 await我们需要的方法try catch .您可以在 Video 中找到示例.
  • callbackFlow offer , 当我们调用 offer我们需要的方法try catch .你可以在上面的问题中找到一个例子。
  • 关于android - 如何修复 Kotlin JobCancellationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61592144/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com