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)

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

    2024年02月07日
    浏览(42)
  • 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日
    浏览(31)
  • SpringBoot 全局异常统一处理:BindException(绑定异常)

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

    2024年01月18日
    浏览(29)
  • SpringBoot全局异常处理源码

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

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

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

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

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

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

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

    2024年03月15日
    浏览(71)
  • SpringBoot全局异常页面处理学习

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

    2024年02月09日
    浏览(36)
  • SpringBoot全局异常处理 | Java

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

    2024年02月08日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包