小编tpe*_*aut的帖子

当您的所有协程已经用 CouroutineExceptionHandler 包装时,如何发现“作业被取消”异常的来源?

我阅读了所有kotlinx UI 文档并实现了一个像那里描述的 ScopedActivity(见下面的代码)。

在我的 ScopedActivity 实现中,我还添加了一个 CouroutineExceptionHandler,尽管我将异常处理程序传递给了我的所有协程,但我的用户遇到了崩溃,我在堆栈跟踪中获得的唯一信息是“作业已取消”。

我现在搜索了几天,但我没有找到解决方案,我的用户仍然随机崩溃,但我不明白为什么......

这是我的 ScopedActivity 实现

abstract class ScopedActivity : BaseActivity(), CoroutineScope by MainScope() {

    val errorHandler by lazy { CoroutineExceptionHandler { _, throwable -> onError(throwable) } }

    open fun onError(e: Throwable? = null) {
        e ?: return
        Timber.i(e)
    }

    override fun onDestroy() {
        super.onDestroy()
        cancel()
    }
}
Run Code Online (Sandbox Code Playgroud)

这是实施它的活动的示例:

class ManageBalanceActivity : ScopedActivity() {

    @Inject
    lateinit var viewModel: ManageBalanceViewModel

    private var stateJob: Job? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_manage_balance) …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-coroutines

5
推荐指数
1
解决办法
2142
查看次数

标签 统计

kotlin ×1

kotlin-coroutines ×1