【问题标题】:How to use ACRA and also set UncaughtExceptionHandler?如何使用 ACRA 并设置 UncaughtExceptionHandler?
【发布时间】:2014-06-01 03:43:12
【问题描述】:

在我的应用程序中,我想设置未捕获的异常处理程序,以便在发生不可预见的崩溃时进行处理。 (我想做一些事情,比如关闭套接字、清除通知……等等)

Thread.currentThread().setDefaultUncaughtExceptionHandler(sDefaultThreadHandler);

在哪里

private static UncaughtExceptionHandler sDefaultThreadHandler = new UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        // i want ACRA to log here, then clear notifications, close out connections, cancel asynctasks...etc.

        // DO NOT REMOVE or else your app will hang when there is a crash.
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(10);
    }
};

问题是,我希望 ACRA 在进程退出之前也进行报告。我该如何做到这一点?

【问题讨论】:

    标签: android exception-handling crash acra


    【解决方案1】:

    哦,等等,nvm。我发现 ACRA 使用默认的异常处理程序(根据https://github.com/ACRA/acra/blob/master/src/main/java/org/acra/ErrorReporter.java#L201),这意味着如果您自己的线程有线程异常处理程序,将首先使用它。

    Thread.currentThread().setUncaughtExceptionHandler(mYourOwnThreadHandler);

    如果你真的需要使用 ACRA,那么在你覆盖的 uncaughtException() 方法中,只需通过调用 Thread.getDefaultUncaughtExceptionHandler().uncaughtException(thread, ex); 向上委托它

    【讨论】:

    • 恕我直言,您必须将默认 UEH 存储在 onCreate() defaultUEH = Thread.getDefaultUncaughtExceptionHandler();并使用 defaultUEH.uncaughtException(thread, ex) 在处理程序中调用它;调用 Thread.getDefaultUncaughtExceptionHandler().uncaughtException(thread, ex);从处理程序将导致循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2013-01-12
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多