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
,我会得到默认行为。
有没有办法在我的课程中实现默认的错误行为?
提前致谢!
答案 0 :(得分:3)
您可以在异常处理程序的末尾添加以下内容,以获取“遗憾的已停止”对话框:
System.exit(1);
但是,这将导致进程终止,这意味着您的AsyncTask将无法运行完成。
无论如何,如果您在uncaughtExceptionHandler中,我会怀疑您的代码是否可靠运行,因为您不知道应用程序的状态是什么。它可能会起作用,也可能不起作用。您还可以尝试在uncaughtExceptionHandler中创建一个新线程,让该线程休眠一会儿,然后使用System.exit()终止该应用程序。这可能会让您的AsyncTask有足够的时间运行完成。