2011-12-29 9 views
9

私はActivity.onDestroy()について混乱しています。アクティビティが破棄されたときにいくつかのリソースを解放する必要がありますが、「戻る」キーを押すとonDestroy()が呼び出されますが、アクティビティがDalvikによって強制終了されたときは呼び出されないようです。そして、私は私の活動を開始し、私がログに表示さAndroid:Activity.onDestroy()はDalvikがこのアクティビティを終了したときに呼び出されません

Log.v("my_tag", "onCreate() called");

onCreate() calledすぎのonCreate()メソッドで

Log.v("my_tag", "onDestroy() called");

と同じ:私はちょうどログを追加することで、それをテストしました。

onDestroy() called 
onCreate() called 

が、私は「ホーム」キーと再び私の活動に行くを押すと、ログは変更されません:私は、私が見る、再び活動を開始し、「戻る」キーを押します。ここに。

次に、「ホーム」キーをもう一度押して、実際に「重い」アプリケーションを起動します。ログではonDestroy()については何もありませんが、アクティビティを再開するとログに表示されます:onCreate() called!だから、onDestroy()は呼び出されませんでしたが、私のアクティビティは殺されました。どうしましたか? onDestroy()ドキュメントから

+1

+1 - 研究のために。 –

答えて

8

[..]システムは、単にそれにこの方法(または任意の他のもの)を呼び出すことなく、アクティビティの ホスティングプロセスを強制終了しますので、 それはいけない状況があります。プロセスが終了したあとに のまわりに残ることを意図したことをするために使用されます。

Androidでは、onDestroy()の保証は受けられません。
一部のリソースを解放する場合は、代わりにonPause()で行う必要があります。

+0

うーん、ありがとう。ドキュメントでは、「アクティビティのライフタイム全体が、onCreate(Bundle)の最初の呼び出しからonDestroy()への最後の呼び出しまでの間に発生するため、とにかく呼び出す必要があると考えました。さて、私は、どこでそれを呼び出すことができるようにリソースを解放すべきですか?実際、この 'Activity'は' Service'をバインドしています。アクティビティが破棄される前にアンバインドしたいと思います。 –

+0

ああ、申し訳ありません、私はあなたがすでに言ったことを知っています:私は 'onPause()'でそれを行うべきです。再度、感謝します。 –

関連する問題