Kotlin全局捕捉协程异常方法详解

作者:安果移不动 时间:2022-10-09 23:27:03 

单个异常捕捉

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

Kotlin全局捕捉协程异常方法详解

注意没有后缀哦

然后回到java类里面 随便找个位置创建class类

Kotlin全局捕捉协程异常方法详解

内容

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

写到刚才创建的没有后缀的文件当中去

Kotlin全局捕捉协程异常方法详解

程序里删除 hander

findViewById<Button>(R.id.button).also {
           it.setOnClickListener {
               GlobalScope.launch {
                   Log.d(TAG, "onCreate: onClick")
                   "anc".substring(10)
               }
           }
       }

点击按钮后程序会闪退

但是

Kotlin全局捕捉协程异常方法详解

异常可以拿到。这就很好了

来源:https://blog.csdn.net/mp624183768/article/details/126458290

标签:Kotlin,协程,异常
0
投稿

猜你喜欢

  • C#调用JS的几种方法

    2022-09-29 23:24:18
  • Spring整合SpringMVC与Mybatis(SSM)实现完整登录功能流程详解

    2022-07-15 10:19:25
  • Java8中的 Lambda表达式教程

    2023-10-13 01:32:29
  • Android实现界面左右滑动切换功能

    2022-08-30 02:00:58
  • 解决Mybatis 大数据量的批量insert问题

    2023-09-08 13:59:40
  • java判断各类型字符个数实例代码

    2022-01-22 16:39:15
  • Android支付宝支付封装代码

    2023-08-02 15:10:06
  • 小程序与后端Java接 口交互实现HelloWorld入门

    2023-11-04 18:55:31
  • Java实现超市会员管理系统

    2021-10-01 08:39:28
  • mybatis QueryWrapper的条件构造之apply、last、select解析

    2022-02-12 17:32:51
  • 如何通过JVM角度谈谈Java的clone操作

    2023-10-13 09:54:40
  • 基于Java Socket实现一个简易在线聊天功能(一)

    2023-09-23 17:18:35
  • Java拷贝数组方法Arrays.copyOf()是地址传递的证明实例

    2023-11-08 11:51:29
  • C#正则表达式匹配与替换字符串功能示例

    2022-12-11 19:44:55
  • maven打包时候修改包名称带上git版本号和打包时间方式

    2022-03-09 20:51:39
  • 如何利用IDEA搭建SpringBoot项目整合mybatis实现简单的登录功能

    2022-01-15 06:14:59
  • 一文带你探究Spring中Bean的线程安全性问题

    2023-10-03 10:52:13
  • c# 实现康威生命游戏(细胞自动机)的示例

    2022-01-08 04:36:22
  • Spring Security OAuth2 实现登录互踢的示例代码

    2023-09-04 19:09:28
  • Unity游戏之存储数据

    2022-06-06 20:58:28
  • asp之家 软件编程 m.aspxhome.com