強制終了ダイアログの代わりに、サポート情報を含むアクティビティをユーザーに表示し、同時にエラー情報を bugsnag に送信したいと考えています。このアドバイス ( https://trivedihardik.wordpress.com/2011/08/20/how-to-avoid-force-close-error-in-android/ ) に従って、キャッチされていない例外のハンドラーを設定しました。bugsnag.notify による bugsnag への報告には明らかに時間がかかるため、「サポート アクティビティ」を表示して通知を送信するには AsyncTask が必要だと考えました。プロセスは、これが完了した後にのみ強制終了されます。私の知る限り、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);
}
}
}