android 全局异常处理封装

这篇具有很好参考价值的文章主要介绍了android 全局异常处理封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

app出现了问题,尤其是多线程问题,某个线程出了问题,很不好找,那是不是可以搞一个统一的处理类,将所有的异常信息都统一到一个地方呢,原本只是一个知识点,但我发现这里还可以

保存异常信息到本地或云端,统计异常信息等,所以就封装了一个类

1 用法

开发者只需重写接口中的handException 方法,就可以统一对异常信息进行处理了

具体怎么处理,就看个人的需求了,我这边是就是如果主线程,就走重启app流程,如果是子线程就忽略,当然如果比较重要,也可以走重启app

用法很简单 初始化一下就行:文章来源地址https://www.toymoban.com/news/detail-835841.html

CrashHandler.getInstance().init(new CrashHandler.CrashListener() {

    @Override
    public boolean handException(Throwable ex) {
        //false : 不处理,true:自己处理
        return false;
    }
});

2 看下具体的代码吧

public class CrashHandler implements Thread.UncaughtExceptionHandler {

    public static final String TAG = "CrashHandler";
    /**
     * 系统默认的UncaughtException处理类
     */
    private Thread.UncaughtExceptionHandler mDefaultHandler;

    private static CrashHandler INSTANCE;
    private CrashListener listener;
    
    private CrashHandler() {

    }

    public interface CrashListener {
        
        boolean handException(Throwable ex);

    }
    
    public static synchronized CrashHandler getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new CrashHandler();
        }
        return INSTANCE;
    }
    
    public void init(CrashListener listener) {
        this.listener = listener;
        //获取系统默认的UncaughtExceptionHandler
        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        Logger.d(TAG, "init mDefaultHandler : " + mDefaultHandler);
        Thread.setDefaultUncaughtExceptionHandler(this);
    }
    
    @Override
    public void uncaughtException(@NonNull Thread thread, @NonNull Throwable ex) {
        boolean handle = handleException(ex);
        //开发者不处理,用默认的处理类兜底
        if (mDefaultHandler != null && !handle) {
            mDefaultHandler.uncaughtException(thread, ex);
        }
    }

    /**
     * 是否忽略,是否重启,发送错误报告等操作可在此完成.
     * 注意,如果是主线程,是必须要重启的
     */
    private boolean handleException(Throwable ex) {
        boolean handle = false;
        if (listener != null) {
            //捕获监听中异常,防止外部开发者使用方代码抛出异常时导致的反复调用
            try {
                handle = listener.handException(ex);
                Logger.e(TAG, "custom bug end ");
            } catch (Throwable e) {
                Logger.e(TAG, "initCustomBug: ", e);
            }
        }
        return handle;
    }
}

到了这里,关于android 全局异常处理封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Java基础常考知识点(基础、集合、异常、JVM)

    Java基础常考知识点(基础、集合、异常、JVM)

    作者: 逍遥Sean 简介:一个主修Java的Web网站游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! 本文收集Java核心的面试常考知识点,码起面试之前复习!!! JDK(Java SE Development Kit) ,

    2024年02月07日
    浏览(10)
  • Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】

    Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】

    目录 一、单个控制器异常处理 1.1 控制器方法 1.2 编写出错页面 1.3 测试结果 二、全局异常处理 2.1 一个有异常的控制器类 2.2 全局异常处理器类 2.3 测试结果  三、自定义异常处理器 3.1 自定义异常处理器 3.2 测试结果 往期专栏文章相关导读  1. Maven系列专栏文章 2. Mybatis系列

    2024年02月16日
    浏览(14)
  • SpringBoot 全局异常统一处理:BindException(绑定异常)

    SpringBoot 全局异常统一处理:BindException(绑定异常)

    在Spring Boot应用中,数据绑定是一个至关重要的环节,它负责将HTTP请求中的参数映射到控制器方法的入参对象上。在这个过程中如果遇到问题,如参数缺失、类型不匹配或验证失败等,Spring MVC将会抛出一个 org.springframework.validation.BindException 异常。本文将深入解析 BindExceptio

    2024年01月18日
    浏览(12)
  • 全局异常处理器

    前言:由于 Controller 调用 Services ,最后调用 Mapper 来操作数据库,若 Mapper 操作数据库出问题了,此时页面报错会按照调用的原路径层层上报,最后未经处理的异常会上报至框架,最后服务器会向前端返回一个 JSON 的报错数据,而前端接收的是对 Result 封装过的 data 对象中的

    2024年02月11日
    浏览(15)
  • SpringBoot全局异常处理源码

    SpringBoot全局异常处理源码

    今天这里叙述的全局异常处理是SpringBoot在Servlet场景下的处理机制,重点是 Servlet 模式,当然 WEBFLUX 今天不做过多描述,SpringBoot2.2.x以后引入的一种响应式web开发,在SpringBoot启动类中可以看到: deduceFromClasspath 方法: 既然是SringBoot的webServlet场景,自然不可以放过的就是 Dis

    2024年02月07日
    浏览(11)
  • Flask 全局异常处理

    异常分为客户端异常和服务端异常,flask 中的异常处理分为三步走:异常注册、异常触发、异常处理。 关于客户端/服务端异常,先看段样例代码: 常用的异常注册的模式包括两种: 装饰器模式: @app.errorhandler 工厂模式: app.register_error_handler() 1.1.1 装饰器模式 使用装饰器模式

    2024年02月10日
    浏览(7)
  • SpringBoot全局异常页面处理学习

    SpringBoot全局异常页面处理学习

    首先我们先在控制器中写一个异常,默认情况下我们的SpringBoot异常页面是这个样子的。 示例代码如下:  一、自定义静态异常页面 自定义静态异常页面,我们可以分成两种方式,第一种就是使用HTTP状态码来命名页面,例如404.html,403.html,500html等。另一种就是直接定义一个4

    2024年02月09日
    浏览(10)
  • dotNet8 全局异常处理

    异常的处理在我们应用程序中是至关重要的,在 dotNet 中有很多异常处理的机制,比如 MVC的异常筛选器 , 管道中间件定义 try catch 捕获异常处理亦或者第三方的解决方案Hellang.Middleware.ProblemDetails等。 MVC异常筛选器 不太灵活,对管道的部分异常捕获不到,后两种方式大家项目应

    2024年03月15日
    浏览(7)
  • SpringBoot全局异常处理 | Java

    SpringBoot全局异常处理 | Java

    ⭐ 简单说两句 ⭐ 作者: 后端小知识 CSDN 个人主页 :后端小知识 🔎 GZH : 后端小知识 🎉 欢迎关注 🔎 点赞 👍 收藏 ⭐️ 留言 📝 亲爱的友友们,我们今天来讲一讲 SpringBoot 的全局异常处理吧😎 🎨什么是全局异常? 全局异常指的是在程序运行过程中发生的非预期异常,

    2024年02月08日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包