gpt4 book ai didi

android - setDefaultUncaughtExceptionHandler 使应用程序静默崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:12 26 4
gpt4 key购买 nike

自定义异常处理程序

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();
}




}

从我的主要 Activity 调用:

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

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

有什么方法可以在我的类中实现默认错误行为吗?

提前致谢!

最佳答案

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

System.exit(1);

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

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

关于android - setDefaultUncaughtExceptionHandler 使应用程序静默崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11281182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com