2

次のアプリ起動時にアプリがクラッシュしたことを知るために、未処理の例外用の例外ハンドラーを追加しました。

@Override
public void uncaughtException(Thread thread, Throwable ex) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("crashed", "yes");
    editor.commit();
}

次の方法でハンドラーを追加しました。

Thread.setDefaultUncaughtExceptionHandler(this);

問題は、ハンドラーを追加したため、エラー時にアプリの動作が異なることです。

  • ハンドラーを追加する前に、アプリがクラッシュしたことを知らせるポップアップが表示されました。

  • ここで、ハンドラーを追加した後、アプリがフリーズし、しばらくすると、アプリが応答しなくなったことと、もう待機するかどうかを通知するポップアップが表示されます。これは良い IMO ではありません。アプリケーションがクラッシュした後に適切に終了する方法はありますか?

4

2 に答える 2

5

元の例外ハンドラーを保存して、未処理の例外に対して独自のカスタム操作を実行した後で呼び出すことができるようにすることができます。このようなもの:

//Inside UncaughtExceptionHandler.java:
…
private UncaughtExceptionHandler defaultUEH;

public DefaultExceptionHandler() 
  {
  this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
  }

@Override
public void uncaughtException(Thread t, Throwable e) 
  {
  //do anything you wish about the Throwable e :getStackTrace(),getCause(),getClass()...
  //call the original uncaught exception handler:
  defaultUEH.uncaughtException(t, e);
  }
于 2012-06-24T13:31:40.753 に答える
0

クラッシュ レポートとクリーンアップの問題を処理できるように、ロジックをACRAと統合することをお勧めします。

于 2012-06-24T13:26:34.063 に答える