onDestroy()は常に呼び出されるとは限りません。呼び出された場合、コードの一部のみが実行されます。
そして、ほとんどの場合、LogCatには「gps state on destroy on first called」というメッセージしか表示されません。何故ですか?
protected void onDestroy(){
super.onDestroy();
Log.d("on destroy called", "gps state on destroy called first");
editor.putBoolean("gpsOn", false);
Log.d("on destroy called", "gps state on destroy called second");
editor.commit();
Log.d("on destroy called", "gps state on destroy called third");
stopRouteTracking();
Log.d("on destroy called", "gps state on destroy called fourth");
}
これを見てください:
この:
http://developer.Android.com/reference/Android/app/Activity.html#onDestroy%28%29
基本的に、onDestroy()
が呼び出される保証はなく、場合によっては、メソッド呼び出しをバイパスして、アプリなどのプロセスが直接強制終了されます。
Android開発者向けドキュメント ここ では、それを見ることができます-
強制終了可能とマークされているメソッドの場合、そのメソッドが返された後、アクティビティをホストしているプロセスは、コードの別の行が実行されずにいつでも強制終了されます。このため、onPause()メソッドを使用して、永続的なデータ(ユーザー編集など)をストレージに書き込む必要があります。
およびonStop()とonDestroy()は両方とも強制終了可能としてマークされます。
これは、onStop()の実行後いつでもプロセスを破棄できるため、onDestroy()で記述されたコードの一部のみが呼び出される理由です。
@Chrisの答えは正しいですが、コードの一部のみが呼び出されるという問題は、コードを呼び出す前にsuper.onDestroy()
を呼び出すことで発生する可能性があります。 super.onDestroy()
は最後に呼び出す必要があります。コードが破棄される前に呼び出されるためです。