Activity のライフサイクル

Android を調べていると、Activity のライフサイクル「生成→起動→動作中→停止→終了」というようなのが、やたらと出てくる。ちょっとまとめてみた。










MethodDetail
onCreate()Activity が起動するときにコールされ、View の作成や変数の初期化などが行われる。onStart() が続く。契機は LAUNCH_ACTIVITY
onRestart()Activity の停止後、再開するときにコールされる。onStart() が続く。契機は RESUME_ACTIVITY
onStart()Activity がユーザによって表示されたときにコールされる。この後、Activity が前面に出てきたときは onResume() が続き、隠れたときは onStop() が続く。契機は LAUNCH_ACTIVITY, RESUME_ACTIVITY
onResume()Activity が前面に表示され、ユーザの操作が可能となったときにコールされる。onPause() が続く。契機は LAUNCH_ACTIVITY, RESUME_ACTIVITY
onPause()他の Activity を起動するときにコールされ、処理中のデータ保存やアニメーション停止を行う。Activity が前面に出てきたときは onResume() が、隠れたときは onStop() が続く。契機は PAUSE_ACTIVITY, PAUSE_ACTIVITY_FINISHING
onStop()Activity が隠れたとき(他の Activity が起動した場合など)にコールされる。ユーザ操作が再開したときは onRestart() が続き、Activity が終了したときは onDestroy() が続く。契機は STOP_ACTIVITY_HIDE, DESTROY_ACTIVITY
onDestroy()Activity が終了するときにコールされる。契機は DESTROY_ACTIVITY


現行の Android は「アプリ終了したように見せかけ」っぽいね。Activity.finish()が呼ばれたら終了済みアプリ対象となって ActivityManager.getRunningTasks() のリストには載らないけど、HOMEキー長押下で表示されるタスクにはおるしな。。ん、タスク表示側の不整合?ただ起動してきたタスクを ActivityManager.getRecentTasks() のリストで表示してるだけ?「Activity の終了」=「Application の終了」では無いような気がしてならない。メッセージに「EXIT_APPLICATION」ってのあるしなあ。Looper.quit() に繋がるのだが、スレッドの終了になるはず。



~/frameworks\policies\base\phone\com\android\internal\policy\impl\RecentApplicationsDialog.java
やはり HOME キー長押下のタスク表示は ActivityManager.getRecentTasks() で起動履歴をすべて表示していた。