Fragmentのライフサイクルの確認 その3 onPause〜onDetach

前回の続きです。
今回はFragmentが非アクティブに移行するonPause〜onDetachを見てみます。

調査環境

Android SDK 3.2(APIレベル13)


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()からコールされる