我想捕捉由活动类中的任何语句引起的异常,以便防止崩溃。测试应用程序可能使用的所有可能场景是不可能的。我想给一个警报对话框或一个文本框内的应用程序按钮报告问题,但不希望应用程序崩溃。有什么办法吗?我尝试使用构造函数在类级别抛出异常,但没有帮助。try-catch不能对每个语句都执行,所以有什么好的反崩溃解决方案可以捕获整个活动类中的异常呢?
kcwpcxri1#
是的,你可以这样做创建一个 ExceptionHandler 上课并收集车祸记录。。
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); }
qlzsbp2j2#
从主线程,例如oncreate()中
Thread thread = Thread.currentThread(); thread.setUncaughtExceptionHandler(uncaughtExceptionHandler);
2条答案
按热度按时间kcwpcxri1#
是的,你可以这样做创建一个
ExceptionHandler
上课并收集车祸记录。。现在,在mainactivity中,使用以下命令初始化exceptionhandler:
qlzsbp2j2#
从主线程,例如oncreate()中