Android自义定捕获异常

        在Android的开发调试使用过程中,对于应用的异常退出,几乎是不可避免的问题,总会有极小概率或者某些偶然的场景我们没有考虑到,导致了应用的异退,如果是不知道规律的时候,我们就很难复现问题,更无从下手去解决问题。

        对于上面这种情况,现在通常的解决方式是记录Crash日志,将日志上传服务器或者存储到本地在调试的时候方便查询。

        下面我们来看如何捕获异退的日志。

        1、首先实现Java中的异常处理接口UncaughtExceptionHandler,重写其uncaughtException方法。

    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        if (//进行自己的业务逻辑判断) {
            //如果用户没有处理则让系统默认的异常处理器来处理  mDefaultHandler通过Thread.getDefaultUncaughtExceptionHandler获取
            mDefaultHandler.uncaughtException(thread, ex);
        } else {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //退出程序
            //退出JVM(java虚拟机),释放所占内存资源,0表示正常退出(非0的都为异常退出)
            System.exit(0);
            //从操作系统中结束掉当前程序的进程
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    }

        2、让应用的异常处理使用我们自定义的接口,调用Thread.setDefaultUncaughtExceptionHandler方法,传入我们的自定义异常处理类的对象。

        Thread.setDefaultUncaughtExceptionHandler(this);

        3、在重写的方法中,插入我们自己的异常处理逻辑。在uncaughtException方法中有参数Throwable,该参数中可以获取堆栈信息等,可以将这些信息格式化为字符串,写入本地某个文件或者传入服务器中,依据实际情况使用。将Throwable堆栈信息转换为String的参考代码如下。

        Writer writer = new StringWriter();
        PrintWriter printWriter = new PrintWriter(writer);
        ex.printStackTrace(printWriter);
        Throwable cause = ex.getCause();
        while (cause != null) {
            cause.printStackTrace(printWriter);
            cause = cause.getCause();
        }
        printWriter.close();
        String result = writer.toString();


        进行异常捕获的方法就简单介绍到这里了,记得要在Application启动的时候初始化!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值