AndroidプログラミングのActivityでonDestroy()呼び出し解析

2018 ワード

AndroidプログラミングのActivityにおけるonDestroy()呼び出し方法を解析した.皆さんの参考にしてください.具体的には以下の通りです.
さっきのBUGで、activityがコールバックインタフェースを実現し、thisを使用してコールバックインタフェースを必要とする方法を設定した場合、このアプリケーションシーンは比較的一般的で、最も一般的なのはonClickListenerインタフェースを実現し、findViewById()であることを発見しました.setOnClickListenr(this)
このコールバックインタフェースが静的オブジェクト(単一モード)に設定されている場合、activity finish()の場合(戻るキーを押してデスクトップに戻る)、activityはonDestroy()を呼び出されません.activityオブジェクトがまだ参照されている可能性があります.
アイコンをクリックしてアプリケーションに戻り、onCreate()を再度呼び出します!
明らかに、onDestroy()にリソースを解放すると、メモリが漏洩します!
解決策はありますか?ある
onPause()メソッドでisFinishing()を判断し、finish()を正常に呼び出した後のactivityのコールバックプロセスはonPause、onStop、onDestroyであり、上記の場合はonPauseのみ!でもisFinishing()マークはtrue!資源を解放することができます.
onDestroyの公式解釈を見てみましょう.

protected void onDestroy () 
Added in API level 1 
Perform any final cleanup before an activity is destroyed. This can happen either because the activity is finishing (someone called finish() on it, or because the system is temporarily destroying this instance of the activity to save space. You can distinguish between these two scenarios with the isFinishing() method. 
Note: do not count on this method being called as a place for saving data! For example, if an activity is editing data in a content provider, those edits should be committed in either onPause() or onSaveInstanceState(Bundle), not here. This method is usually implemented to free resources like threads that are associated with an activity, so that a destroyed activity does not leave such things around while the rest of its application is still running. There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it, so it should not be used to do things that are intended to remain around after the process goes away. 
Derived classes must call through to the super class's implementation of this method. If they do not, an exception will be thrown. 


この文書がAndroidプログラムの設計に役立つことを願っています.