android-notes / Cockroach

降低Android非必要crash
MIT License
3.25k stars 448 forks source link

里面的方法都是什么意思? #47

Closed yuchangliang closed 1 year ago

yuchangliang commented 4 years ago
> /**
 * 子线程抛出异常时始终调用该方法。主线程只有第一次抛出异常时才会调用该方法,该方法中到的throwable都会上报到bugly。以后主线程的异常只调用 {@link #onBandageExceptionHappened(Throwable)}
 *
 * @param thread
 * @param throwable
 */
protected abstract void onUncaughtExceptionHappened(Thread thread, Throwable throwable);

/**
 * 当原本导致app崩溃的主线程异常发生后,主线程再次抛出导致app崩溃异常时会调用该方法。(自己try catch住的异常不会导致app崩溃)
 * (该方法中到的throwable不会上报到bugly,也无需上报到bugly,因为本次异常可能是由于第一次主线程异常时app没有崩溃掉才发生的,只要修复了bug就不会发生该异常了)
 *
 * @param throwable 主线程的异常
 */
protected abstract void onBandageExceptionHappened(Throwable throwable);

方法注释写的太绕了,至今不明白这两个方法什么意思。作者在试图把简单的方法进行复杂的描述? 自带混淆属性? 有道翻译 uncaught-->未捕获 bandage-->绷带

有什么不同,应用场景是什么?为什么不是主线程对应一个方法,子线程对应一个方法。为什么两个要混用啊? UncaughtExceptionHandler 如果是捕获子线程异常的,为什么主线程第一次抛出异常时会调用该方法? UncaughtExceptionHandler 如果是捕获所有异常的,那就不需要 if (t == Looper.getMainLooper().getThread()) 来判断是否主线程了。 这块什么逻辑?

enterSafeMode:安全模式是做什么的,为什么要写这个模式?

我打印了ExceptionHandler接口的四个方法,同一个crash 为什么会回调多个的方法?例如,有一次同时回调了uncaughtExceptionHappened和bandageExceptionHappened?

别说我不仔细看文档和注释,别说我能力有限小白等等这些话。 我就是看不懂才问的

@android-notes