如果我使用 ACRA,则不会调用 Android UncaughtExceptionHandler



它适用于Android 5.0,但不适用于Jellybean设备。

@ReportsCrashes(
    formKey = "", // This is required for backward compatibility but not used
    formUri = "dummyurl",
    reportType = org.acra.sender.HttpSender.Type.JSON,
    httpMethod = org.acra.sender.HttpSender.Method.PUT,
    formUriBasicAuthLogin="adminTest",
    formUriBasicAuthPassword="adminTest",
    mode = ReportingInteractionMode.TOAST,
    resToastText = R.string.crash_toast_text)
public class Application extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        init();
        ACRA.init(this);
        Thread.setDefaultUncaughtExceptionHandler(sUncaughtExceptionHandler);
    }
    private UncaughtExceptionHandler sUncaughtExceptionHandler = new UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            Log.i(LogTag, "uncaughtException: ");
            dummyMethod();
            Thread.getDefaultUncaughtExceptionHandler().uncaughtException(
                thread, ex);
        }
    };
}

ACRA 设置自己的 UncaughtExceptioHandler 来执行错误报告,然后委托给之前存在的任何 UncaughtExceptionHandler。

因此,如果您希望在 ACRA 完成错误报告后调用 UncaughtExceptionHandler,则需要在调用ACRA.init(this);之前设置异常处理程序

由于您正在发送 Toast 通知,因此您还需要设置forceCloseDialogAfterToast因为假设 defaultExceptionHandler 是来自 Android 框架的处理程序,它将显示一个强制关闭对话框,如果还显示 Toast,您不希望显示它。

相关内容

  • 没有找到相关文章

最新更新