読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

Androidアクティビティのライフサイクル解釈

Android

公式のライフサイクルがちょっと分かりにくい

Activity | Android Developers に載ってる図。

f:id:kobake:20140318092341p:plain
状態のフローなんだか処理のフローなんだかどっちつかずでややこしい。
何度見ても頭に入らないから毎度毎度図を見直すことになる。

状態遷移図として表現すると分かりやすい

f:id:kobake:20140318105128p:plain
こんな感じです。どうでしょうか。
あくまでも図の形式は状態遷移図で、ハンドラ呼び出しは矢印に現れるだけ。

アクティビティ作成

アクティビティが作成されると、「未作成」状態から「最前面」状態へと一気に遷移する。
その過程で onCreate, onStart, onResume が呼ばれる。

f:id:kobake:20140318111637p:plain

半透明な他のアクティビティに覆われたとき

他のアクティビティが手前に来たら「非最前面」状態に遷移する。
その過程で onPause が呼ばれる。

f:id:kobake:20140318111335p:plain

手前に来た他のアクティビティが半透明の場合、
元のアクティビティは透けて見えるので、「非最前面」状態でありながらも「可視」状態となる。

不透明な他のアクティビティに隠されたとき

不透明な他のアクティビティが手前に来ると、
元のアクティビティは「不可視」状態へ遷移する。
その過程で onPause, onStop が呼ばれる。

f:id:kobake:20140318111001p:plain

「最前面」状態からの終了

「最前面」状態から「未作成」状態へと一気に遷移する。
その過程で onPause, onStop, onDestroy が呼ばれる。

f:id:kobake:20140318111115p:plain

「不可視」状態からの終了

「未作成」状態へと遷移する。
その過程で onDestroy が呼ばれる。

f:id:kobake:20140318111241p:plain


不揃いなハンドラ onRestart について

onCreate / onDestroy, onStart / onStop, onResume / onPause と、せっかく対象的にメソッドが定義されているのに、onRestart だけがその秩序から外れている気がします。個人的にはあまり美しいと感じません。図にも入れませんでした。
onStart の引数とかに restart フラグ持たせれば良かったんじゃないかなぁ。

});