java将成为一个实现线程的类。UncaughtExceptionHandler是否捕获所有可能的未捕获异常?
目前,我有一个名为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
。有没有不可能的情况?我想到的一种可能性是,我从一个实现UncaughtExceptionHandler
的外部SDK调用一个类,这可能会缩短foo.uncaughtException
中的异常处理。还有什么地方会让我失望呢
共 (0) 个答案