Вместо диалогового окна принудительного закрытия я хотел бы показать пользователю действие с информацией о поддержке и в то же время отправить информацию об ошибке в Bugsnag. Я следовал этому совету (https://trivedihardik.wordpress.com/2011/08/20/how-to-avoid-force-close-error-in-android/), чтобы настроить обработчик для неперехваченных исключений. Отчетность в bugsnag с bugsnag.notify, очевидно, занимает некоторое время, поэтому я подумал, что мне нужен AsyncTask, чтобы показать «Активность поддержки» и отправить уведомление Процесс должен быть убит только после того, как это было завершено. AFAIK, проблема с AsyncTask заключается в том, что он не способен обновлять поток пользовательского интерфейса при помещении в класс помощника. Так как я могу убедиться, что ошибка сообщается 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);
}
}
}