目前,我有一个名为的类Foo
,它是我程序的入口点。当任何时候发生崩溃时,我希望能够获取堆栈跟踪并将其输出到文件中。由于我的软件中每个可能的逻辑流都将从 开始Foo
,因此它似乎是处理未捕获异常的理想场所。我的想法是,任何抛出的异常最终都会冒泡回到Foo
将要处理的地方。
目前,我有一个潜在的解决方案,我通过在其他Foo
调用的类中抛出不同的异常来测试它,我的解决方案还没有让我失望。但是,我不是 Java 专家,所以我想确保没有任何我误解的东西。
假设我的软件中没有其他类实现UncaughtExceptionHandler
,并且crash
在某个Foo foo
对象上调用了下面的方法。是否存在引发异常但从foo.uncaughtException
未被调用的情况?
public class Foo implements Thread.UncaughtExceptionHandler {
public Foo() {
Thread.setDefaultUncaughtExceptionHandler(this);
}
public void crash() {
Handler mainLooperHandler = new Handler(Looper.getMainLooper());
mainLooperHandler.post(new Runnable() {
public void run() {
// crash here
}
});
}
@Override
public void uncaughtException(Thread t, Throwable e) {
// handle uncaught exception
}
}
我尝试从Runnable.run
上面创建的不同线程中抛出异常,但我能够确保它foo.uncaughtException
仍然被调用。有没有不会出现的场景?我想到的一种可能性是,我从外部 SDK 调用一个类,该类实现UncaughtExceptionHandler
可能会短路foo.uncaughtException
. 还有什么地方会让我失望?