如何处理未捕获的异常,然后将处理委托给系统?

时间:2017-08-14 12:22:19

标签: android

我想在我的应用中为每个未捕获的异常发送firebase崩溃报告,但我也希望Android系统显示"应用已停止响应"对话。我该怎么做?我已经有一个发送firebase崩溃报告的UncaughtException处理程序。我现在的问题是让Android处理其余的过程。

1 个答案:

答案 0 :(得分:1)

通过存储旧的异常处理程序并将未捕获的异常传递给系统,可以将未捕获的异常委托回系统。

首先创建一个Application类,如下所示:

public class Controller extends Application {

    private static Thread.UncaughtExceptionHandler defaultHandler;

    @Override
    public void onCreate() {
        super.onCreate();
        if (defaultHandler == null) {
            defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        }
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                FirebaseCrash.report(e); //or whatever
                defaultHandler.uncaughtException(t, e); //this will show crash dialog.
            }
        });
    }

}

然后将此类用作清单中的应用程序:

<application
    android:name=".Controller"
    ... />