Android APP全局捕获异常并保存至本地

本文介绍了如何在Android应用中实现全局捕获异常并将其保存到本地。通过创建CrashHandler类并实现Thread.UncaughtExceptionHandler接口,当发生未捕获异常时,程序不会立即崩溃,而是将异常信息保存为Json格式,利用fastjson库进行JavaBean到Json的转换。同时,文章提到了ExitAppUtils类用于优雅地退出应用程序,确保所有Activity被正确关闭。
摘要由CSDN通过智能技术生成

    开篇就借用一下清代黄宗羲的《明儒学案》中的一句话与各位共勉——“学则智,不学则愚”。我们一起加油ヾ(◍°∇°◍)ノ゙!!

    在做项目的时候,当程序出现异常时,如果能够及时捕获到并上传到服务器,那么这样我们就能够看到异常日志信息了。本文就来实现这个功能。

    如果某个应用安装的Thread.UncaughtExceptionHandler未移交给默认的Thread.UncaughtExceptionHandler,则当出现未捕获的异常时,系统不会终止应用,即不会出现系统默认的“抱歉,xxx应用已停止运行”。因此,我们就可以对应用的异常进行全局捕获,从而将异常保存下来。首先,新建CrashHandler类并实现Thread.UncaughtExceptionHandler接口,并重写public void uncaughtException(Thread thread, Throwable ex)方法,当产生异常时就会转入该函数处理。

 /**
     * 当UncaughtException发生时会转入该函数来处理
     */
    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        if (!handleException(ex) && mDefaultHandler != null) {
            //如果用户没有处理则让系统默认的异常处理器来处理
            mDefaultHandler.uncaughtException(thread, ex);
        } else {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {

            }
        }
        //退出程序
        ExitAppUtils.getInstance().exit();
    }

    最后一行代码用来退出程序,之前在网上查找资料,退出程序的方式多为:android.os.Process.killProcess(android.os.Process.myPid())、System.exit(0)或者System.exit(2),但在实际操作中,程序并不会完美退出,而是会多次执行handleException()方法。本文的ExitAppUtils()类使用List来对APP的Activity进行管理,现将所有的Activity销毁,最后实现程序的退出,该类的代码将在本文末尾给出。

    正常情况下,uncaughtException()方法会调用handleException()方法对异常进行处理,之后睡两秒程序退出。我们也可以在handleException(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值