Fragmentのライフサイクルの確認 その3 onPause〜onDetach
前回の続きです。
今回はFragmentが非アクティブに移行するonPause〜onDetachを見てみます。
Activity#onPause()前に呼ばれるFragmentメソッド
onPauseのログ
onPause java.lang.Exception at com.mydroid.fragmenttest.fragment.FragmentSample.onPause(FragmentSample.java:55) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:834) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:960) at android.app.FragmentManagerImpl.dispatchPause(FragmentManager.java:1688) at android.app.Activity.performPause(Activity.java:4490) at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1194) at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2535) at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2505) at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2483) at android.app.ActivityThread.access$700(ActivityThread.java:122) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1035) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:132) at android.app.ActivityThread.main(ActivityThread.java:4123) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:491) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) at dalvik.system.NativeStart.main(Native Method)
わかったこと
ログから判明したこと。
- Activity#onPause()処理前にコールされる
- Activity#performPause() → FragmentManagerImpl#dispatchPause()からコールされる
Activity#onPause()前に呼ばれるFragmentメソッド
onStopのログ
onStop java.lang.Exception at com.mydroid.fragmenttest.fragment.FragmentSample.onStop(FragmentSample.java:61) at android.app.Fragment.performStop(Fragment.java:1476) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:845) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:960) at android.app.FragmentManagerImpl.dispatchStop(FragmentManager.java:1692) at android.app.Activity.performStop(Activity.java:4529) at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2909) at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2968) at android.app.ActivityThread.access$1100(ActivityThread.java:122) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1057) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:132) at android.app.ActivityThread.main(ActivityThread.java:4123) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:491) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) at dalvik.system.NativeStart.main(Native Method)
わかったこと
ログから判明したこと。
- Activity#onStop()処理前にコールされる
- Activity#performStop() → FragmentManagerImpl#dispatchStop()からコールされる
Activity#onDestroy()前に呼ばれるFragmentメソッド
以下の順番でFragmentメソッドがコールされる
- onDestroyView()
- onDestroy()
- onDetach()
onDestroyViewのログ
onDestroyView java.lang.Exception at com.mydroid.fragmenttest.fragment.FragmentSample.onDestroyView(FragmentSample.java:67) at android.app.Fragment.performDestroyView(Fragment.java:1495) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:863) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:960) at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1697) at android.app.Activity.performDestroy(Activity.java:4560) at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1078) at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2937) at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2968) at android.app.ActivityThread.access$1100(ActivityThread.java:122) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1057) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:132) at android.app.ActivityThread.main(ActivityThread.java:4123) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:491) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) at dalvik.system.NativeStart.main(Native Method)
onDestroyのログ
onDestroy java.lang.Exception at com.mydroid.fragmenttest.fragment.FragmentSample.onDestroy(FragmentSample.java:73) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:960) at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1697) at android.app.Activity.performDestroy(Activity.java:4560) (以降、onDestroyViewと同じため割愛)
onDetachのログ
onDetach java.lang.Exception at com.mydroid.fragmenttest.fragment.FragmentSample.onDetach(FragmentSample.java:79) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:935) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:977) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:960) at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1697) at android.app.Activity.performDestroy(Activity.java:4560) (以降、onDestroyViewと同じため割愛)
わかったこと
ログから判明したこと。
- Activity#onDestroy()処理前にコールされる
- 3つともActivity#performDestroy() → FragmentManagerImpl#dispatchDestroy()からコールされる