我想向用户显示带有支持信息的活动,而不是强制关闭对话框,同时将错误信息发送给bugsnag。我遵循了此建议(https://trivedihardik.wordpress.com/2011/08/20/how-to-avoid-force-close-error-in-android/)来为未捕获的异常设置处理程序。使用bugsnag.notify向bugsnag报告显然需要一些时间,所以我认为我需要AsyncTask来显示“支持活动”并发送通知。该过程必须在完成后才被终止。 AFAIK,AsyncTask的问题是当放入帮助器类时无法更新UI线程。那么如何确定错误已报告给busgnag,显示了“支持活动”并随后终止了该过程?
MainActivity.java中的代码
Bugsnag.init(this);
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
ExceptionHandler.java
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;
import com.bugsnag.android.Bugsnag;
public class ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
private final Activity myContext;
public ExceptionHandler(Activity context) {
myContext = context;
}
public void uncaughtException(Thread thread, Throwable exception) {
new ReportCrashTask().execute();
}
private class ReportCrashTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
Intent intent = new Intent(myContext, CrashActivity.class);
myContext.startActivity(intent);
Bugsnag.notify(new RuntimeException("Test error"));
return "done";
}
@Override
protected void onPostExecute(String aVoid) {
super.onPostExecute(aVoid);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
}
}
}