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

 更新时间:2022年08月27日 08:34:52   作者:安果移不动  
协程是互相协作的程序,协程是结构化的。如果把Java的异常处理机制,照搬到Kotlin协程中,一定会遇到很多的坑。Kotlin协程中的异常主要分两大类,协程取消异常(CancellationException) 其他异常

单个异常捕捉

  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协程异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Flutter 底部弹窗如何实现多项选择

    Flutter 底部弹窗如何实现多项选择

    在Flutter中提供了一个showModelBottomSheet方法用于弹出底部弹窗,本篇基于这个方法介绍实现底部弹窗多选的思路和方式。
    2021-06-06
  • Android ScrollView只能添加一个子控件问题解决方法

    Android ScrollView只能添加一个子控件问题解决方法

    这篇文章主要介绍了Android ScrollView只能添加一个子控件问题解决方法,涉及Android界面布局的相关技巧,需要的朋友可以参考下
    2016-02-02
  • flutter图片组件核心类源码解析

    flutter图片组件核心类源码解析

    这篇文章主要为大家介绍了flutter图片组件源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Android源码解析之截屏事件流程

    Android源码解析之截屏事件流程

    这篇文章我们主要讲一下Android系统中的截屏事件处理流程。用过android系统手机的同学应该都知道,一般的android手机按下音量减少键和电源按键就会触发截屏事件.
    2018-05-05
  • Android仿IOS底部弹出对话框

    Android仿IOS底部弹出对话框

    这篇文章主要为大家详细介绍了Android仿IOS底部弹出对话框的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Android使用CoordinatorLayout实现底部弹出菜单

    Android使用CoordinatorLayout实现底部弹出菜单

    这篇文章主要为大家详细介绍了Android使用CoordinatorLayout实现底部弹出菜单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Android Studio修改Log信息颜色的实现

    Android Studio修改Log信息颜色的实现

    这篇文章主要介绍了Android Studio修改Log信息颜色的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Android学习之BottomSheetDialog组件的使用

    Android学习之BottomSheetDialog组件的使用

    BottomSheetDialog是底部操作控件,可在屏幕底部创建一个支持滑动关闭视图。本文将通过示例详细讲解它的使用,感兴趣的小伙伴可以了解一下
    2022-06-06
  • Android如何快速集成腾讯Bugly

    Android如何快速集成腾讯Bugly

    这篇文章主要介绍了Android如何快速集成腾讯Bugly,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-04-04
  • Android Studio添加日志过滤方式

    Android Studio添加日志过滤方式

    这篇文章主要介绍了Android Studio添加日志过滤方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论