setDefaultUncaughtExceptionHandler使应用程序静默崩溃

时间:2012-07-01 10:20:45

标签: android

CustomExceptionHandler

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,我会得到默认行为。

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

提前致谢!

1 个答案:

答案 0 :(得分:3)

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

System.exit(1);

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

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