pooh3's memo

Android周りを中心に。軽めに、いい加減さ50%程度で

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で行うようにとも説明してあります。