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

简介: 异常捕获

如题,本次代码在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----------------------------------------------------------------

目录
相关文章
|
机器学习/深度学习 自然语言处理 机器人
【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人
LLM会产生误导性的 “幻觉”,依赖的信息可能过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。
|
Java API Spring
史上最全AOP 切面表达式,看完逼格有提升了
史上最全AOP 切面表达式,看完逼格有提升了。源码已放开头了,请你查收。
1526 0
|
Android开发 开发者
什么是Android Jetpack,它包括哪些组件?
什么是Android Jetpack,它包括哪些组件?
525 0
|
8月前
|
运维 自然语言处理 数据库
Odoo 中文版安装详解
Odoo 是一款支持多语言的企业管理软件,用户可轻松切换至中文界面。本文详解了 Odoo 的手工安装流程,包括 Docker 安装、镜像拉取与容器运行,同时分析了安装中的常见难题,如 Docker 配置复杂、镜像拉取困难及参数设置繁琐等。为简化安装,推荐使用 Websoft9 解决方案,通过其控制台快速部署 Odoo,无需关心底层技术细节,专注于企业管理功能的配置与使用,高效实现系统搭建与运维。
794 1
|
11月前
|
存储 安全 生物认证
《严守权限之门:ArkTS中模型访问权限的管理之道》
在鸿蒙Next的ArkTS开发中,管理模型访问权限至关重要。通过系统权限管理机制,在config.json中声明权限并使用AbilityAccessCtrl模块进行检查和申请;基于用户身份认证,确保只有授权用户能访问模型;实现细粒度权限控制,按角色分配不同权限级别;实时监测权限变化,动态调整访问权限。这些措施共同保障数据安全、隐私及应用稳定性。
391 29
|
存储 缓存 NoSQL
Redis问题之一致性Hash是如何解决哈希+取余方法中的稳定性问题的
Redis问题之一致性Hash是如何解决哈希+取余方法中的稳定性问题的
207 10
|
11月前
|
网络性能优化 对象存储
阿里云产品十二月刊来啦
通义千问VL图片理解大模型部分规格降价,PAI 灵骏智算资源配额支持多个VSW,对象存储 OSS 资源池 QoS 发布,详情请点击阿里云产品十二月刊
186 4
|
消息中间件 Java Kafka
springboot整合kafka消费者最佳实践
springboot整合kafka消费者最佳实践
1770 1
|
机器学习/深度学习 缓存 PyTorch
Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决
Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决
2143 0
|
消息中间件 存储 JSON
rabbitmq集群操作与启停
rabbitmq集群操作与启停
rabbitmq集群操作与启停