2011/07/22

フラグメントのライフサイクルとかメモ 2

トランザクション等イマイチ自身の理解に欠ける部分が多いため、とりあえず色々挙動を見てみた。
(色々と言うほども無いけれど。。。)


FragmentTransactionのaddとreplaceって何が違うんだろうか、的な。


結論:
・addを呼ぶと純粋にFragmentを2枚重ねるイメージ。Activityの状態遷移と同時に二つのFragmentの状態も変わっていく。
・replaceは先にあるFragment1のViewを破棄した後に呼んだFragment2のViewを作成する。Fragment1はAttachしているActivityがonPauseに入るタイミングでFragment2と同時にonSaveInstanceStateが呼ばれ状態が保存されるが、再びFragment1がトップになるまでは呼ばれない。


動き:
1.アプリを開くとActivity1が起動する
2.Activity1がFragment1を自動的にAttachする
3.Fragment1上のボタンを押すとFragment2をActivity1でFragment1がAttachしているViewにadd/replaceする
4.Fragment2上のボタンを押すとActivity2を起動する
5.Activity2はFragment3を自動的にAttachする
6.Fragment3上のボタンを押すとActivity2が終了する
7.戻る連打でアプリを終了させる


*** FragmentTransaction#add ***

Activity2を起動しない場合

07-22 06:48:16.317: DEBUG/TEST(31299): Activity_1 : onCreate
07-22 06:48:16.377: DEBUG/TEST(31299): Activity_1 : onStart
07-22 06:48:16.377: DEBUG/TEST(31299): Fragment_1 : onAttach
07-22 06:48:16.377: DEBUG/TEST(31299): Activity_1 : onAttachFragment
07-22 06:48:16.377: DEBUG/TEST(31299): Fragment_1 : onCreate
07-22 06:48:16.377: DEBUG/TEST(31299): Fragment_1 : onCreateView
07-22 06:48:16.377: DEBUG/TEST(31299): Fragment_1 : onActivityCreated
07-22 06:48:16.387: DEBUG/TEST(31299): Fragment_1 : onStart
07-22 06:48:16.387: DEBUG/TEST(31299): Activity_1 : onPostCreate
07-22 06:48:16.387: DEBUG/TEST(31299): Activity_1 : onResume
07-22 06:48:16.387: DEBUG/TEST(31299): Fragment_1 : onResume

07-22 06:48:19.367: DEBUG/TEST(31299): Fragment_1 : onClick
07-22 06:48:19.407: DEBUG/TEST(31299): Fragment_2 : onAttach
07-22 06:48:19.407: DEBUG/TEST(31299): Activity_1 : onAttachFragment
07-22 06:48:19.407: DEBUG/TEST(31299): Fragment_2 : onCreate
07-22 06:48:19.407: DEBUG/TEST(31299): Fragment_2 : onCreateView
07-22 06:48:19.427: DEBUG/TEST(31299): Fragment_2 : onActivityCreated
07-22 06:48:19.427: DEBUG/TEST(31299): Fragment_2 : onStart
07-22 06:48:19.427: DEBUG/TEST(31299): Fragment_2 : onResume

07-22 06:48:20.387: DEBUG/TEST(31299): Activity_1 : onBackPressed
07-22 06:48:20.387: DEBUG/TEST(31299): Fragment_2 : onPause
07-22 06:48:20.387: DEBUG/TEST(31299): Fragment_2 : onStop
07-22 06:48:20.387: DEBUG/TEST(31299): Fragment_2 : onDestroyView
07-22 06:48:20.387: DEBUG/TEST(31299): Fragment_2 : onDestroy
07-22 06:48:20.387: DEBUG/TEST(31299): Fragment_2 : onDetach

07-22 06:48:20.777: DEBUG/TEST(31299): Activity_1 : onBackPressed
07-22 06:48:20.787: DEBUG/TEST(31299): Activity_1 : onPause
07-22 06:48:20.787: DEBUG/TEST(31299): Fragment_1 : onPause
07-22 06:48:20.887: DEBUG/TEST(31299): Activity_1 : onStop
07-22 06:48:20.887: DEBUG/TEST(31299): Fragment_1 : onStop
07-22 06:48:20.887: DEBUG/TEST(31299): Activity_1 : onDestroy
07-22 06:48:20.887: DEBUG/TEST(31299): Fragment_1 : onDestroyView
07-22 06:48:20.887: DEBUG/TEST(31299): Fragment_1 : onDestroy
07-22 06:48:20.887: DEBUG/TEST(31299): Fragment_1 : onDetach


起動する場合
。。。ここで色塗り力尽きる。

07-22 06:54:46.407: DEBUG/TEST(31299): Activity_1 : onCreate
07-22 06:54:46.457: DEBUG/TEST(31299): Activity_1 : onStart
07-22 06:54:46.457: DEBUG/TEST(31299): Fragment_1 : onAttach
07-22 06:54:46.457: DEBUG/TEST(31299): Activity_1 : onAttachFragment
07-22 06:54:46.457: DEBUG/TEST(31299): Fragment_1 : onCreate
07-22 06:54:46.457: DEBUG/TEST(31299): Fragment_1 : onCreateView
07-22 06:54:46.497: DEBUG/TEST(31299): Fragment_1 : onActivityCreated
07-22 06:54:46.497: DEBUG/TEST(31299): Fragment_1 : onStart
07-22 06:54:46.497: DEBUG/TEST(31299): Activity_1 : onPostCreate
07-22 06:54:46.497: DEBUG/TEST(31299): Activity_1 : onResume
07-22 06:54:46.497: DEBUG/TEST(31299): Fragment_1 : onResume

07-22 06:54:47.747: DEBUG/TEST(31299): Fragment_1 : onClick
07-22 06:54:47.747: DEBUG/TEST(31299): Fragment_2 : onAttach
07-22 06:54:47.747: DEBUG/TEST(31299): Activity_1 : onAttachFragment
07-22 06:54:47.747: DEBUG/TEST(31299): Fragment_2 : onCreate
07-22 06:54:47.747: DEBUG/TEST(31299): Fragment_2 : onCreateView
07-22 06:54:47.747: DEBUG/TEST(31299): Fragment_2 : onActivityCreated
07-22 06:54:47.747: DEBUG/TEST(31299): Fragment_2 : onStart
07-22 06:54:47.747: DEBUG/TEST(31299): Fragment_2 : onResume

07-22 06:54:48.457: DEBUG/TEST(31299): Fragment_2 : onClick
07-22 06:54:48.467: DEBUG/TEST(31299): Activity_1 : onSaveInstanceState
07-22 06:54:48.467: DEBUG/TEST(31299): Fragment_1 : onSaveInstanceState
07-22 06:54:48.467: DEBUG/TEST(31299): Fragment_2 : onSaveInstanceState
07-22 06:54:48.467: DEBUG/TEST(31299): Activity_1 : onPause
07-22 06:54:48.467: DEBUG/TEST(31299): Fragment_1 : onPause
07-22 06:54:48.477: DEBUG/TEST(31299): Fragment_2 : onPause
07-22 06:54:48.487: DEBUG/TEST(31299): Activity_2 : onCreate
07-22 06:54:48.497: DEBUG/TEST(31299): Activity_2 : onStart
07-22 06:54:48.497: DEBUG/TEST(31299): Fragment_3 : onAttach
07-22 06:54:48.497: DEBUG/TEST(31299): Activity_2 : onAttachFragment
07-22 06:54:48.497: DEBUG/TEST(31299): Fragment_3 : onCreate
07-22 06:54:48.497: DEBUG/TEST(31299): Fragment_3 : onCreateView
07-22 06:54:48.497: DEBUG/TEST(31299): Fragment_3 : onActivityCreated
07-22 06:54:48.497: DEBUG/TEST(31299): Fragment_3 : onStart
07-22 06:54:48.497: DEBUG/TEST(31299): Activity_2 : onPostCreate
07-22 06:54:48.497: DEBUG/TEST(31299): Activity_2 : onResume
07-22 06:54:48.497: DEBUG/TEST(31299): Fragment_3 : onResume
07-22 06:54:48.637: DEBUG/TEST(31299): Activity_1 : onStop
07-22 06:54:48.637: DEBUG/TEST(31299): Fragment_1 : onStop
07-22 06:54:48.637: DEBUG/TEST(31299): Fragment_2 : onStop

07-22 06:54:49.257: DEBUG/TEST(31299): Fragment_3 : onClick
07-22 06:54:49.257: DEBUG/TEST(31299): Activity_2 : finish
07-22 06:54:49.277: DEBUG/TEST(31299): Activity_2 : onPause
07-22 06:54:49.277: DEBUG/TEST(31299): Fragment_3 : onPause
07-22 06:54:49.287: DEBUG/TEST(31299): Activity_1 : onActivityResult
07-22 06:54:49.287: DEBUG/TEST(31299): Fragment_2 : onActivityResult
07-22 06:54:49.287: DEBUG/TEST(31299): Activity_1 : onRestart
07-22 06:54:49.287: DEBUG/TEST(31299): Activity_1 : onStart
07-22 06:54:49.287: DEBUG/TEST(31299): Fragment_1 : onStart
07-22 06:54:49.287: DEBUG/TEST(31299): Fragment_2 : onStart
07-22 06:54:49.287: DEBUG/TEST(31299): Activity_1 : onResume
07-22 06:54:49.287: DEBUG/TEST(31299): Fragment_1 : onResume
07-22 06:54:49.287: DEBUG/TEST(31299): Fragment_2 : onResume
07-22 06:54:49.407: DEBUG/TEST(31299): Activity_2 : onStop
07-22 06:54:49.407: DEBUG/TEST(31299): Fragment_3 : onStop
07-22 06:54:49.407: DEBUG/TEST(31299): Activity_2 : onDestroy
07-22 06:54:49.407: DEBUG/TEST(31299): Fragment_3 : onDestroyView
07-22 06:54:49.407: DEBUG/TEST(31299): Fragment_3 : onDestroy
07-22 06:54:49.407: DEBUG/TEST(31299): Fragment_3 : onDetach

07-22 06:54:49.997: DEBUG/TEST(31299): Activity_1 : onBackPressed
07-22 06:54:49.997: DEBUG/TEST(31299): Fragment_2 : onPause
07-22 06:54:49.997: DEBUG/TEST(31299): Fragment_2 : onStop
07-22 06:54:49.997: DEBUG/TEST(31299): Fragment_2 : onDestroyView
07-22 06:54:49.997: DEBUG/TEST(31299): Fragment_2 : onDestroy
07-22 06:54:49.997: DEBUG/TEST(31299): Fragment_2 : onDetach

07-22 06:54:50.997: DEBUG/TEST(31299): Activity_1 : onBackPressed
07-22 06:54:51.007: DEBUG/TEST(31299): Activity_1 : onPause
07-22 06:54:51.007: DEBUG/TEST(31299): Fragment_1 : onPause
07-22 06:54:51.287: DEBUG/TEST(31299): Activity_1 : onStop
07-22 06:54:51.287: DEBUG/TEST(31299): Fragment_1 : onStop
07-22 06:54:51.287: DEBUG/TEST(31299): Activity_1 : onDestroy
07-22 06:54:51.287: DEBUG/TEST(31299): Fragment_1 : onDestroyView
07-22 06:54:51.287: DEBUG/TEST(31299): Fragment_1 : onDestroy
07-22 06:54:51.287: DEBUG/TEST(31299): Fragment_1 : onDetach


*** FragmentTransaction#replace ***

Activity2を起動しない場合

07-22 07:08:44.957: DEBUG/TEST(32444): Activity_1 : onCreate
07-22 07:08:44.987: DEBUG/TEST(32444): Activity_1 : onStart
07-22 07:08:45.017: DEBUG/TEST(32444): Fragment_1 : onAttach
07-22 07:08:45.017: DEBUG/TEST(32444): Activity_1 : onAttachFragment
07-22 07:08:45.017: DEBUG/TEST(32444): Fragment_1 : onCreate
07-22 07:08:45.017: DEBUG/TEST(32444): Fragment_1 : onCreateView
07-22 07:08:45.037: DEBUG/TEST(32444): Fragment_1 : onActivityCreated
07-22 07:08:45.037: DEBUG/TEST(32444): Fragment_1 : onStart
07-22 07:08:45.037: DEBUG/TEST(32444): Activity_1 : onPostCreate
07-22 07:08:45.037: DEBUG/TEST(32444): Activity_1 : onResume
07-22 07:08:45.047: DEBUG/TEST(32444): Fragment_1 : onResume

07-22 07:08:48.097: DEBUG/TEST(32444): Fragment_1 : onClick
07-22 07:08:48.117: DEBUG/TEST(32444): Fragment_1 : onPause
07-22 07:08:48.117: DEBUG/TEST(32444): Fragment_1 : onStop
07-22 07:08:48.117: DEBUG/TEST(32444): Fragment_1 : onDestroyView
07-22 07:08:48.137: DEBUG/TEST(32444): Fragment_2 : onAttach
07-22 07:08:48.137: DEBUG/TEST(32444): Activity_1 : onAttachFragment
07-22 07:08:48.137: DEBUG/TEST(32444): Fragment_2 : onCreate
07-22 07:08:48.137: DEBUG/TEST(32444): Fragment_2 : onCreateView
07-22 07:08:48.147: DEBUG/TEST(32444): Fragment_2 : onActivityCreated
07-22 07:08:48.147: DEBUG/TEST(32444): Fragment_2 : onStart
07-22 07:08:48.147: DEBUG/TEST(32444): Fragment_2 : onResume

07-22 07:08:50.337: DEBUG/TEST(32444): Activity_1 : onBackPressed
07-22 07:08:50.337: DEBUG/TEST(32444): Fragment_2 : onPause
07-22 07:08:50.337: DEBUG/TEST(32444): Fragment_2 : onStop
07-22 07:08:50.337: DEBUG/TEST(32444): Fragment_2 : onDestroyView
07-22 07:08:50.337: DEBUG/TEST(32444): Fragment_2 : onDestroy
07-22 07:08:50.337: DEBUG/TEST(32444): Fragment_2 : onDetach
07-22 07:08:50.337: DEBUG/TEST(32444): Fragment_1 : onCreateView
07-22 07:08:50.347: DEBUG/TEST(32444): Fragment_1 : onActivityCreated
07-22 07:08:50.347: DEBUG/TEST(32444): Fragment_1 : onStart
07-22 07:08:50.347: DEBUG/TEST(32444): Fragment_1 : onResume

07-22 07:08:50.827: DEBUG/TEST(32444): Activity_1 : onBackPressed
07-22 07:08:51.207: DEBUG/TEST(32444): Activity_1 : onPause
07-22 07:08:51.207: DEBUG/TEST(32444): Fragment_1 : onPause
07-22 07:08:51.417: DEBUG/TEST(32444): Activity_1 : onStop
07-22 07:08:51.417: DEBUG/TEST(32444): Fragment_1 : onStop
07-22 07:08:51.417: DEBUG/TEST(32444): Activity_1 : onDestroy
07-22 07:08:51.417: DEBUG/TEST(32444): Fragment_1 : onDestroyView
07-22 07:08:51.417: DEBUG/TEST(32444): Fragment_1 : onDestroy
07-22 07:08:51.417: DEBUG/TEST(32444): Fragment_1 : onDetach


Activity2を起動する場合

07-22 07:09:58.637: DEBUG/TEST(32444): Activity_1 : onCreate
07-22 07:09:58.657: DEBUG/TEST(32444): Activity_1 : onStart
07-22 07:09:58.657: DEBUG/TEST(32444): Fragment_1 : onAttach
07-22 07:09:58.657: DEBUG/TEST(32444): Activity_1 : onAttachFragment
07-22 07:09:58.657: DEBUG/TEST(32444): Fragment_1 : onCreate
07-22 07:09:58.657: DEBUG/TEST(32444): Fragment_1 : onCreateView
07-22 07:09:58.667: DEBUG/TEST(32444): Fragment_1 : onActivityCreated
07-22 07:09:58.667: DEBUG/TEST(32444): Fragment_1 : onStart
07-22 07:09:58.667: DEBUG/TEST(32444): Activity_1 : onPostCreate
07-22 07:09:58.667: DEBUG/TEST(32444): Activity_1 : onResume
07-22 07:09:58.667: DEBUG/TEST(32444): Fragment_1 : onResume

07-22 07:09:59.447: DEBUG/TEST(32444): Fragment_1 : onClick
07-22 07:09:59.467: DEBUG/TEST(32444): Fragment_1 : onPause
07-22 07:09:59.467: DEBUG/TEST(32444): Fragment_1 : onStop
07-22 07:09:59.467: DEBUG/TEST(32444): Fragment_1 : onDestroyView
07-22 07:09:59.467: DEBUG/TEST(32444): Fragment_2 : onAttach
07-22 07:09:59.467: DEBUG/TEST(32444): Activity_1 : onAttachFragment
07-22 07:09:59.467: DEBUG/TEST(32444): Fragment_2 : onCreate
07-22 07:09:59.467: DEBUG/TEST(32444): Fragment_2 : onCreateView
07-22 07:09:59.467: DEBUG/TEST(32444): Fragment_2 : onActivityCreated
07-22 07:09:59.467: DEBUG/TEST(32444): Fragment_2 : onStart
07-22 07:09:59.467: DEBUG/TEST(32444): Fragment_2 : onResume

07-22 07:09:59.927: DEBUG/TEST(32444): Fragment_2 : onClick
07-22 07:09:59.957: DEBUG/TEST(32444): Activity_1 : onSaveInstanceState
07-22 07:09:59.957: DEBUG/TEST(32444): Fragment_1 : onSaveInstanceState
07-22 07:09:59.957: DEBUG/TEST(32444): Fragment_2 : onSaveInstanceState
07-22 07:09:59.957: DEBUG/TEST(32444): Activity_1 : onPause
07-22 07:09:59.957: DEBUG/TEST(32444): Fragment_2 : onPause
07-22 07:09:59.967: DEBUG/TEST(32444): Activity_2 : onCreate
07-22 07:09:59.967: DEBUG/TEST(32444): Activity_2 : onStart
07-22 07:09:59.967: DEBUG/TEST(32444): Fragment_3 : onAttach
07-22 07:09:59.967: DEBUG/TEST(32444): Activity_2 : onAttachFragment
07-22 07:09:59.967: DEBUG/TEST(32444): Fragment_3 : onCreate
07-22 07:09:59.967: DEBUG/TEST(32444): Fragment_3 : onCreateView
07-22 07:09:59.977: DEBUG/TEST(32444): Fragment_3 : onActivityCreated
07-22 07:09:59.977: DEBUG/TEST(32444): Fragment_3 : onStart
07-22 07:09:59.977: DEBUG/TEST(32444): Activity_2 : onPostCreate
07-22 07:09:59.977: DEBUG/TEST(32444): Activity_2 : onResume
07-22 07:09:59.977: DEBUG/TEST(32444): Fragment_3 : onResume
07-22 07:10:00.117: DEBUG/TEST(32444): Activity_1 : onStop
07-22 07:10:00.117: DEBUG/TEST(32444): Fragment_2 : onStop

07-22 07:10:00.277: DEBUG/TEST(32444): Fragment_3 : onClick
07-22 07:10:00.277: DEBUG/TEST(32444): Activity_2 : finish
07-22 07:10:00.287: DEBUG/TEST(32444): Activity_2 : onPause
07-22 07:10:00.287: DEBUG/TEST(32444): Fragment_3 : onPause
07-22 07:10:00.297: DEBUG/TEST(32444): Activity_1 : onActivityResult
07-22 07:10:00.297: DEBUG/TEST(32444): Fragment_2 : onActivityResult
07-22 07:10:00.297: DEBUG/TEST(32444): Activity_1 : onRestart
07-22 07:10:00.297: DEBUG/TEST(32444): Activity_1 : onStart
07-22 07:10:00.297: DEBUG/TEST(32444): Fragment_2 : onStart
07-22 07:10:00.297: DEBUG/TEST(32444): Activity_1 : onResume
07-22 07:10:00.297: DEBUG/TEST(32444): Fragment_2 : onResume
07-22 07:10:00.408: DEBUG/TEST(32444): Activity_2 : onStop
07-22 07:10:00.408: DEBUG/TEST(32444): Fragment_3 : onStop
07-22 07:10:00.408: DEBUG/TEST(32444): Activity_2 : onDestroy
07-22 07:10:00.408: DEBUG/TEST(32444): Fragment_3 : onDestroyView
07-22 07:10:00.408: DEBUG/TEST(32444): Fragment_3 : onDestroy
07-22 07:10:00.408: DEBUG/TEST(32444): Fragment_3 : onDetach

07-22 07:10:00.877: DEBUG/TEST(32444): Activity_1 : onBackPressed
07-22 07:10:00.877: DEBUG/TEST(32444): Fragment_2 : onPause
07-22 07:10:00.877: DEBUG/TEST(32444): Fragment_2 : onStop
07-22 07:10:00.877: DEBUG/TEST(32444): Fragment_2 : onDestroyView
07-22 07:10:00.887: DEBUG/TEST(32444): Fragment_2 : onDestroy
07-22 07:10:00.887: DEBUG/TEST(32444): Fragment_2 : onDetach
07-22 07:10:00.887: DEBUG/TEST(32444): Fragment_1 : onCreateView
07-22 07:10:00.897: DEBUG/TEST(32444): Fragment_1 : onActivityCreated
07-22 07:10:00.897: DEBUG/TEST(32444): Fragment_1 : onStart
07-22 07:10:00.897: DEBUG/TEST(32444): Fragment_1 : onResume

07-22 07:10:01.257: DEBUG/TEST(32444): Activity_1 : onBackPressed
07-22 07:10:01.267: DEBUG/TEST(32444): Activity_1 : onPause
07-22 07:10:01.267: DEBUG/TEST(32444): Fragment_1 : onPause
07-22 07:10:01.507: DEBUG/TEST(32444): Activity_1 : onStop
07-22 07:10:01.507: DEBUG/TEST(32444): Fragment_1 : onStop
07-22 07:10:01.507: DEBUG/TEST(32444): Activity_1 : onDestroy
07-22 07:10:01.517: DEBUG/TEST(32444): Fragment_1 : onDestroyView
07-22 07:10:01.517: DEBUG/TEST(32444): Fragment_1 : onDestroy
07-22 07:10:01.517: DEBUG/TEST(32444): Fragment_1 : onDetach




挙動は相当違うらしい。つづく。