异常捕获(二)自定义全局异常捕获

简介: 异常捕获

如题,本次代码在native尚未验证,只在java层进行了验证。

原理

当一个线程由于未捕获异常即将终止时,Java虚拟机将使用Thread的getuncaughtexceptionhandler()方法查询线程的uncaughtException处理程序,并调用处理程序的uncaughtException方法,将线程和异常作为参数传递。一个线程如果没有设置uncaughtExceptionHandler,将使用线程所在的线程组来处理这个未捕获异常。线程组ThreadGroup实现了UncaughtExceptionHandler,所以可以用来处理未捕获异常。

实现

定义一个类,继承Thread.UncaughtExceptionHandler,并且重写里面的uncaughtException方法,代码如下图:

public class MyCatchException implements Thread.UncaughtExceptionHandler {
    /**
     * MyCatchException实例
     */

    private static MyCatchException instance;

    /**
     * 获取MyCatchException实例 ,单例模式
     */

    public static MyCatchException getInstance() {
        if (instance == null) {
            instance = new MyCatchException();
        }
        return instance;
    }

    /**
     * 异常捕获
     */
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.out.println("全局异常捕获--start---");
        try {
            //todo 异常时相关操作
            Thread.sleep(2000);
        } catch (Exception e1) {
            System.out.println("清空用户信息异常: " + e1.getMessage());
        }
        android.os.Process.killProcess(android.os.Process.myPid());
        System.out.println("全局异常捕获--end---");
    }
}

再在项目中的application里面定义,具体实现如下图:

/**
     * bugly init
     */
    private void initBugly() {
        //设置全部异常捕获
        try {
            MyCatchException handler = MyCatchException.getInstance();
            Thread.setDefaultUncaughtExceptionHandler(handler);
            LogUtil.d("init----设置全局自定义异常捕获成功");
        } catch (Exception e) {
            LogUtil.d("init----设置全局自定义异常捕获错误: " + e.getMessage());
        }
    }

对于自定义全局异常和bugly同时使用的问题,请看我上一篇文章
bugly与自定义全局异常捕获
that's all----------------------------------------------------------------

目录
相关文章
|
数据采集 PyTorch 数据处理
Pytorch学习笔记(3):图像的预处理(transforms)
Pytorch学习笔记(3):图像的预处理(transforms)
2665 1
Pytorch学习笔记(3):图像的预处理(transforms)
|
Android开发 开发者
什么是Android Jetpack,它包括哪些组件?
什么是Android Jetpack,它包括哪些组件?
706 0
|
Linux 网络安全 Python
如何在服务器上运行python文件
如何在服务器上运行python文件
|
8月前
|
JSON 安全 Java
SpringBoot鉴权
本文介绍基于Spring Security与JWT实现客户端Token认证的完整方案,涵盖登录鉴权、Token生成与验证、角色权限控制等细节。通过自定义过滤器与认证组件,结合Redis或数据库可扩展实现高效安全的无状态认证体系,适用于Spring Boot微服务架构。
|
存储 安全 生物认证
《严守权限之门:ArkTS中模型访问权限的管理之道》
在鸿蒙Next的ArkTS开发中,管理模型访问权限至关重要。通过系统权限管理机制,在config.json中声明权限并使用AbilityAccessCtrl模块进行检查和申请;基于用户身份认证,确保只有授权用户能访问模型;实现细粒度权限控制,按角色分配不同权限级别;实时监测权限变化,动态调整访问权限。这些措施共同保障数据安全、隐私及应用稳定性。
587 29
|
前端开发 JavaScript API
React 文件下载组件:File Download
本文详细介绍了如何在React应用中实现文件下载组件,包括基本概念、实现步骤和代码示例。同时,探讨了常见问题如文件类型不匹配、文件名乱码等及其解决方法,旨在提升用户体验和代码可维护性。
1091 2
|
机器学习/深度学习 数据采集 人工智能
利用深度学习优化图像识别准确性
【4月更文挑战第28天】 在计算机视觉领域,图像识别的准确性对于各种应用至关重要。随着深度学习技术的迅猛发展,卷积神经网络(CNNs)已成为提升图像识别精度的核心工具。本文探讨了几种先进的深度学习策略,包括数据增强、迁移学习以及网络结构优化,并通过实验验证了这些方法对提高模型泛化能力和识别准确度的有效性。我们展示了如何通过综合运用这些技术,显著提升图像分类任务的性能,并讨论了在实际应用中可能遇到的挑战及相应的解决策略。
SpringCloud启动Consider defining a bean of type ‘org.springframework.web.client.RestTemplate‘ in your
SpringCloud启动Consider defining a bean of type ‘org.springframework.web.client.RestTemplate‘ in your
554 1
|
机器学习/深度学习 缓存 PyTorch
Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决
Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决
2655 0
|
消息中间件 存储 JSON
rabbitmq集群操作与启停
rabbitmq集群操作与启停
rabbitmq集群操作与启停

热门文章

最新文章