Activityライフサイクルの豆知識
Activityライフサイクルの豆知識
- Activityが破棄される場合通常はonDestroyが呼ばれるが呼ばれないケースも存在する。
- それはホームボタンや他のActivity起動でバックグラウンド行ったままシステムに破棄される場合
- やってみたらわかる ホーム押下 -> メニューボタンクリック -> アプリ画面をフリックしてアプリを終了
- onSaveInstanceStateはホームボタン押下、他Activity起動で必ず呼ばれるが
復帰時は対となるはずのonRestoreInstanceSate呼ばれない。
- ただし画面回転時はonSaveInstanceStateとonRestoreInstanceSateは呼ばれる。
- バックグラウンド移行時にonSaveInstanceStateが呼ばれる理由
- うっかりシステムがActivityに紐付いていたOjbectをGC(ガベージコレクション)で開放してしまった時にRestoreするため。
- GCが走らなければそのまま値を持っているのでRestoreの必要性がない
- 戻るボタンではonSaveInstanceStateは呼ばれないでonDestroyまで流れる。
※onSaveInstanceSateに対するonRestoreInstanceSateはActivityがバックグラウンドに行き、システムにActivityが破棄されると呼ばれるようです。バックグラウンド時にタスクマネージャーからkillした場合は呼ばれないっぽい。
注意点。onSaveInstanceは必ず呼ばれる保証のあるものではありません、そのため確実に保存したいデータが存在する場合はonSaveInstanceStateを利用しないようにとGoogleのActivityの説明にあります。またその場合はonPauseで行うようにとも説明してあります。