Android进阶之路Android技术知识Android开发

Android中的线程捕获

2019-07-30  本文已影响16人  pphdsny

前言

最近上的一个版本中,突然bugly的Java异常一个都没有了,正好升级了bugly的版本,还以为接入有问题,排查一些正常,特自信的说版本代码优秀…0 bug~~~

可是后面细想几百万的DAU,一个Java异常都没有都没有,这太不正常了。

目前项目中捕获全局异常的有:bugly、umeng、自己。

排查

bugly的捕获异常代码实现

文件路径:com.tencent.bugly.crashreport.crash.a

设置全局异常捕获

保存之前的UncaughtExceptionHandler ,将自己设置为默认异常处理器Thread.setDefaultUncaughtExceptionHandler(this)

异常捕获 异常分发

对捕获异常做分发

umeng的捕获异常代码实现

文件路径:com.umeng.analytics.pro.l

umeng的UncaughtExceptionHandler

实现逻辑和bugly类似

自己的捕获异常代码实现

自己的UncaughtExceptionHandler

问题定位:handleException笔误写错了!处理,导致之前默认异常处理未被调用,而且自己异常捕获写在最后,覆盖了之前的异常捕获

建议

为了避免此种问题再次发生,对异常捕获可以参考以下代码进行扩展

public class CrashHandler implements Thread.UncaughtExceptionHandler {

    private final Thread.UncaughtExceptionHandler mDefaultHandler;

    public CrashHandler() {
      //缓存之前的默认异常捕获
        mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    @Override
    public void uncaughtException(Thread t, Throwable e) {
      //分发异常
        if (mDefaultHandler != null) {
            mDefaultHandler.uncaughtException(t, e);
        }
      //TODO 自己处理
        Log.w("CrashHandler", e);
    }
}

当然最简单的方式是将自己的UncaughtExceptionHandler写在buglyumeng的前面,让buglyumeng分发异常给自己,但是你也不能保证你前面就没有其他的异常捕获监听,所以还是建议用上述方法。

扩展

setUncaughtExceptionHandler

setDefaultUncaughtExceptionHandler

上一篇下一篇

猜你喜欢

热点阅读