热修复Kotlin JobCancellationException?

问题描述 投票:1回答:1

我因为Kotlin JobCancellationException而崩溃。

以下是关于崩溃的细节。

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

我所知道的是 监理员JobImpl 是针对ViewModelScope的,它将会被调用方法 取消 当ViewModel生命周期结束时。

我对这个Exception很疑惑,因为Kotlin的coroutines会直接忽略这个Exception,但是它被抛出,导致App崩溃。如果它有stack我就能想明白,但它没有,只是告诉我这个工作被取消了。

我花了大约3天多的时间在异常上,但就是不知道。

我看到视频: KotlinConf 2019:Coroutines! 得把他们都抓起来!作者:Florina Muntenescu & Manuel Vivo。,我发现如果取消了范围,如果你调用了 等待 上,它会抛出异常,但我没有发现任何 等待 上的异常,所以谁能告诉我一些可能导致同样异常并使App崩溃的代码?

所以,谁能给我看一些也许会导致同样异常并使App崩溃的代码?Thx,有。

android kotlin
1个回答
1
投票

终于,我找到了导致Exception的原因,问题地址也流水了。

kotlin.coroutines.channels.waitingClose: JobCancellationException

事实上, awaitClose 不会抛出 JobCancellationException因为 awaitClose 是一个可取消的悬浮函数。该 offer 方法将抛出 JobCancellationException 如果工作被取消是因为 offer 不是一个可取消的悬浮函数。

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

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

  1. async await异常,当我们调用 await 的方法,我们需要 try catch. 你可以找到和例子在 录像.

  2. callbackFlow offer,当我们把 offer 的方法,我们需要 try catch. 而你可以在上面的问题中找到一个例子。

© www.soinside.com 2019 - 2024. All rights reserved.