【定番】Fragment in Activity な Pager で ライフサイクルなコールバックの順序を確認する

基本中の基本だと思われますが、
Androidアプリ開発時の「ライフサイクル」ネタです。

fragment_lifecycle

activity_fragment_lifecycle

Fragments | Android Developers Fragments | Android Developers

現状、API14以降が7割を越えてきた今、
きっと困惑している初心者なあたしとそんな開発者向け。

Scrollabele Tabs + swipe

確認したのは、AndroidStudioでデフォルトの
Activityテンプレートとして用意されている
「Scrollable Tabs + Swipe」
で確認してみましたよ。

Launcherから起動した後、Backキーで終了

Activity.onCreate()
Activity.onStart()
Activity.onResume()
  Fragment.onAttach()
  Fragment.onCreate()
  Fragment.onCreateView()
  Fragment.onActivityCreated()
  Fragment.onStart()
  Fragment.onResume()
(※ ここでBackキー押下)
  Fragment.onPause()
Activity.onPause()
  Fragment.onStop()
Activity.onStop()
  Fragment.onDestroyView()
  Fragment.onDetach()
  Fragment.onDestroy()
Activity.onDestroy()

Launcher から起動して、ホームボタンを押す

Activity.onCreate()
Activity.onStart()
Activity.onResume()
  Fragment.onAttach()
  Fragment.onCreate()
  Fragment.onCreateView()
  Fragment.onActivityCreated()
  Fragment.onStart()
  Fragment.onResume()
(※ここでHOMEボタン)
  Fragment.onPause()
  Fragment.onSaveInstanceState()
  Fragment.onStop()
Activity.onStop()

最近使ったアプリから復帰

Activity.onRestart()
  Fragment.onStart()
Activity.onStart()
Activity.onResume()
  Fragment.onResume()

Laucherから起動後、画面回転、戻るボタンで終了

Activity.onCreate()
Activity.onStart()
Activity.onResume()
  Fragment.onAttach()
  Fragment.onCreate()
  Fragment.onCreateView()
  Fragment.onActivityCreated()
  Fragment.onStart()
  Fragment.onResume()

(画面回転)

  Fragment.onPause()
Activity.onPause()

  Fragment.onSaveInstanceState()
Activity.onSaveInstanceState()

  Fragment.onStop()
Activity.onStop()

  Fragment.onDestroyView()
  Fragment.onDestroy()
  Fragment.onDetach()
Activity.onDestroy()

  Fragment.onAttach()
  Fragment.onCreate()

Activity.onCreate()
  Fragment.onCreateView()
  Fragment.onActivityCreated()
  Fragment.onStart()

Activity.onStart()
Activity.onRestoreInstanceState()
Activity.onResume()
  Fragment.onResume()

(戻るボタンを押す)

  Fragment.onPause()
Activity.onPause()

  Fragment.onStop()
Activity.onStop()

  Fragment.onDestroyView()
  Fragment.onDestroy()
  Fragment.onDetach()
Activity.onDestroy()

実際は、複数のFragmentがあるのですがそれは省略。

まとめ

・FragmentとActicity同名のメソッドについては基本的に

開始系 Activity->Fragment
終了系 Fragment->Activity

の順番で処理される。

「生まれるときは親(Acticity)が先、消えるときは子(Fragment)が先」

・onSaveIntanceState() も消える前の処理なので子が先。
・Activity.onRestart() 時に Fragment.onStart() が呼ばれる。

とりあえず押さえておこうと思ったので。

benigumocom/LifeCycle %title%


関連ワード:  AndroidAndroidStudio開発