JobCancellationException

JobCancellationException

由于Kotlin JobCancellationException,我当机了。

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

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

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

我对异常非常困惑,因为Kotlin协程只会忽略该异常,但是它被抛出并导致App崩溃。如果它有堆栈,我只能弄清楚,但没有,只要告诉我该作业已取消。

我花了大约3天以上的时间来异常(exception),但是却一无所知。

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

因此,有人可以告诉我一些可能导致相同异常并导致App崩溃的代码吗? Thx,在那里。

最佳答案

最后,我找到了导致异常的原因,并且问题地址不断涌现:

kotlin.coroutines.channels.awaitClose: JobCancellationException

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

顺便说一句,callbackFlow是一个实验性的API,因此可能会导致一些错误,因此在使用它时,我们需要小心。因为取消Job时,它不会总是忽略JobCancellationException,而且我认为它对开发人员不友好。

现在,我发现了两种情况会导致JobCancellationException,因此我们需要try catch异常。

  • async await,当我们调用await方法时,我们需要try catch。您可以在Video中找到示例。
  • callbackFlow offer,当我们调用offer方法时,我们需要try catch。您可以在上面的问题中找到一个示例。
  • 10-06 13:14