0

目前,我有一个名为的类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. 还有什么地方会让我失望?

4

0 回答 0