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

简介: 异常捕获

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

目录
相关文章
|
4月前
全局异常处理
全局异常处理
27 1
|
27天前
|
程序员
项目中的全局异常是如何处理的
项目中的全局异常处理通常包括对预期异常(程序员手动抛出)和运行时异常的管理。项目已提供`BaseException`作为基础异常类,用于手动抛出异常,并通过`GlobalExceptionHandler`进行全局处理。`
30 4
|
10月前
|
运维 Prometheus 监控
java异常 | 处理规范、全局异常、Error处理
java异常 | 处理规范、全局异常、Error处理
|
5月前
|
JSON 前端开发 Java
SpringMVC中异常处理与ControllerAdvice捕捉全局异常
SpringMVC中异常处理与ControllerAdvice捕捉全局异常
59 0
|
9月前
全局参数、异常处理
全局参数、异常处理
105 0
|
10月前
|
Java
定义全局异常和全局异常处理器
定义全局异常和全局异常处理器
【异常机制】异常抛出变量的生命周期
【异常机制】异常抛出变量的生命周期
48 0
【异常机制】异常抛出变量的生命周期
|
JSON 前端开发 数据格式
RestControllerAdvice注解与全局异常处理
从该注解的名字可以看到,这是一个与切面有关的注解,事实上也是如此,我们都知道切面的注解肯定都有个作用范围,切面类的注解只能对其作用范围内的操作,实现切面操作。那RestCntrollerAdvice的作用范围是什么呢?
268 0
|
Java 开发者
全局异常处理器|学习笔记
快速学习全局异常处理器
159 0
全局异常处理器|学习笔记
|
人工智能 编译器 程序员
C# 异常捕获
在编写程序时,编译器会帮我们检查程序是否有错误,当我们改正之后,程序就可以编译了,通常也能够正常运行。可以帮助我们提高项目的健壮性,使得程序在发生错误时,仍能解决问题并继续运行,这样也就提高了用户体验。这段代码在编译的时候不会报错,而且当我们正常输入整数时,程序也能正常运行。作为一个老道的程序员,应该学会提前预判可能产生的错误,并提前写好解决办法。,造成的影响有大有小,但是几乎都是恶性的。,而把上述那种运行时可能出现的错误叫做。但当我们输入的不是整数时,就出现了。为捕获到的异常,我们可以通过。
65 0
C# 异常捕获