Kotlin 协程异常全局捕捉
Posted 安果移不动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 协程异常全局捕捉相关的知识,希望对你有一定的参考价值。
单个异常捕捉
val handler = CoroutineExceptionHandler coroutineContext, throwable ->
Log.d(TAG, "onCreate: handler$throwable")
Log.d(TAG, "onCreate:1")
findViewById<Button>(R.id.button).also
it.setOnClickListener
GlobalScope.launch(handler)
Log.d(TAG, "onCreate: onClick")
"anc".substring(10)
launch里面如果不写handler
可以使用这样的方式来创建全局异常捕获处理
在main目录下
新建 resources\\META-INF\\services\\kotlinx.coroutines.CoroutineExceptionHandler
注意没有后缀哦
然后回到java类里面 随便找个位置创建class类
内容
package com.example.coroutine
import android.util.Log
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlin.coroutines.CoroutineContext
class GlobalCoroutineExceptionHandler : CoroutineExceptionHandler
override val key = CoroutineExceptionHandler
private val TAG = "GlobalCortineExceptionH"
override fun handleException(context: CoroutineContext, exception: Throwable)
Log.d(TAG, "handleException:$exception ")
根据包名和类目
package com.example.coroutine.
GlobalCoroutineExceptionHandler
我们可以确定这个文件的路径为
com.example.coroutine.GlobalCoroutineExceptionHandler
写到刚才创建的没有后缀的文件当中去
程序里删除 hander
findViewById<Button>(R.id.button).also
it.setOnClickListener
GlobalScope.launch
Log.d(TAG, "onCreate: onClick")
"anc".substring(10)
点击按钮后程序会闪退
但是
异常可以拿到。这就很好了
以上是关于Kotlin 协程异常全局捕捉的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程异常处理 ③ ( 协程异常处理器 CoroutineExceptionHandler 捕获异常 | 验证 CoroutineScope 协程的异常捕捉示例 )
Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )
Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )
Kotlin 协程协程异常处理 ② ( SupervisorJob 协程 | supervisorScope 协程作用域构建器函数 )
Kotlin 协程协程异常处理 ② ( SupervisorJob 协程 | supervisorScope 协程作用域构建器函数 )
Kotlin 协程协程异常处理 ⑤ ( 异常传播的特殊情况 | 取消子协程示例 | 子协程抛出异常后父协程处理异常时机示例 | 异常聚合 | 多个子协程抛出的异常会聚合到第一个异常中 )