4

自定义异常处理程序

public class CustomExceptionHandler implements UncaughtExceptionHandler {

private Context ctx;
private ContentResolver cr;

public CustomExceptionHandler(Context ctx, ContentResolver cr) {
    this.ctx = ctx;
    this.cr = cr;
}

public void uncaughtException(Thread t, Throwable e) {

    final Writer result = new StringWriter();
    final PrintWriter printWriter = new PrintWriter(result);
    e.printStackTrace(printWriter);
    String stacktrace = result.toString();
    printWriter.close();


    String deviceUuid = Utilities.DeviceUuid(ctx, cr);
    String bluetoothName = Utilities.LocalBluetoothName();

    AsyncTasks.ErrorLogTask logTask = new AsyncTasks.ErrorLogTask(e, bluetoothName, deviceUuid, stacktrace);
    logTask.execute();
}




}

从我的主要活动中调用:

Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(getBaseContext(), getContentResolver()));

现在发生异常时,我没有收到常规的“不幸的是,已停止”弹出窗口。它只是一个黑屏。如果我从我的主要活动中删除我的呼叫,换句话说,CustomExceptionHandler不再使用,我会得到默认行为。

有没有办法在我的班级中实现默认错误行为?

提前致谢!

4

1 回答 1

3

您可以在异常处理程序的末尾添加以下内容以获取“不幸已停止”对话框:

System.exit(1);

但是,这将导致进程终止,这意味着您的 AsyncTask 不会运行完成。

无论如何,如果您处于 uncaughtExceptionHandler 中,我会怀疑您的代码是否能够可靠地运行,因为您不知道应用程序的状态是什么。它可能有效,也可能无效。您还可以尝试在 uncaughtExceptionHandler 中创建一个新线程并让该线程休眠一段时间,然后使用 System.exit() 终止应用程序。这可能会给您的 AsyncTask 足够的时间来运行完成。

于 2012-07-01T11:00:23.733 回答