この回答に記載されているように、グローバル例外処理サービスをセットアップしようとしています。Thread.UncaughtExceptionHandler
アプリケーションが安定した状態にないか、OS によってプロセスが強制終了されるまでに十分な時間がない可能性があるため、クラッシュ後にカスタム コードが正常に実行されない可能性があるため、このアプローチは論理的に思えます。
残念ながら、このアプローチは機能しないようです。なぜなら、サービスは同じプロセスで起動されるため、サービスも強制終了されるからです。ハンドラーからサービスを開始するにはどうすればよいuncaughtException()
ですか? 完全に別のプロセスでサービスを強制的に起動できますか?
カスタムのデフォルト (VM レベル) 例外ハンドラーを次のApplication
ように設定しています。
public class MyApp extends Application {
@Override
public void onCreate() {
Thread.setDefaultUncaughtExceptionHandler(
MyExceptionReporter.getInstance(this));
...
カスタム ハンドラーでは、次のようにサービスを起動しています。
final Intent i = new Intent(MyExceptionService.INTENT);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra(MyExceptionService.EXTRA_STACK_TRACE,
Log.getStackTraceString(ex));
mContext.startService(i);
サービスはAndroidMaifest.xml
ファイルで宣言されており、アプリケーションの他の場所から正常に起動します。