gpt4 book ai didi

java - Android中捕获线程中的所有异常

转载 作者:行者123 更新时间:2023-12-02 02:42:59 27 4
gpt4 key购买 nike

我想捕获由 Activity 类中的任何语句引起的异常,以便我可以防止任何崩溃。测试应用程序可能使用的所有可能场景是不可能的。我想在应用程序内提供一个警报对话框或带有按钮的文本框来报告问题,但不希望应用程序崩溃。那么有办法做到这一点吗?

我尝试使用构造函数在类级别抛出异常,但这没有帮助。 Try Catch 无法对每个语句执行,那么什么是可以在整个 Activity 类中捕获异常的良好防崩溃解决方案呢?

最佳答案

是的,您可以创建一个 ExceptionHandler 类并收集崩溃记录..

 public class ExceptionHandler implements
Thread.UncaughtExceptionHandler {
private final Activity myContext;
private final String LINE_SEPARATOR = "\n";

public ExceptionHandler(Activity context) {
myContext = context;
}

public void uncaughtException(Thread thread, Throwable exception) {
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
StringBuilder errorReport = new StringBuilder();
errorReport.append("************ CAUSE OF ERROR ************\n\n");
errorReport.append(stackTrace.toString());

errorReport.append("\n************ DEVICE INFORMATION ***********\n");
errorReport.append("Brand: ");
errorReport.append(Build.BRAND);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Device: ");
errorReport.append(Build.DEVICE);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Model: ");
errorReport.append(Build.MODEL);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Id: ");
errorReport.append(Build.ID);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Product: ");
errorReport.append(Build.PRODUCT);
errorReport.append(LINE_SEPARATOR);
errorReport.append("\n************ FIRMWARE ************\n");
errorReport.append("SDK: ");
errorReport.append(Build.VERSION.SDK);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Release: ");
errorReport.append(Build.VERSION.RELEASE);
errorReport.append(LINE_SEPARATOR);
errorReport.append("Incremental: ");
errorReport.append(Build.VERSION.INCREMENTAL);
errorReport.append(LINE_SEPARATOR);

Intent intent = new Intent(myContext, CrashActivity.class); //start a new activity to show error message
intent.putExtra("error", errorReport.toString());
myContext.startActivity(intent);

android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
}
}

现在在您的 MainActivity 中使用以下方法初始化 ExceptionHandler:

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
setContentView(R.layout.activity_main);
}

关于java - Android中捕获线程中的所有异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111230/

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