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 协程协程异常处理 ⑤ ( 异常传播的特殊情况 | 取消子协程示例 | 子协程抛出异常后父协程处理异常时机示例 | 异常聚合 | 多个子协程抛出的异常会聚合到第一个异常中 )