何时会调用片段的onDestroyView,但它不会被销毁?

时间:2014-05-11 14:44:25

标签: android android-fragments

看看Fragment的生命周期,我不确定这里可能发生的情况。 当Fragment停止活动时,有两种可能的方法。

  1. 调用适当的回调,销毁视图然后销毁片段
  2. 调用回调,销毁视图,但保持片段本身存活
  3. 在哪种情况下完成了两种选择中的哪一种?是什么决定了他们中的哪一个? 如果将一个片段添加到后台堆栈中,然后删除/替换,为什么不将它丢弃?为什么要保留它?

    编辑:它突然出现在我身上,是否取决于片段是否被保留?

    enter image description here

3 个答案:

答案 0 :(得分:26)

似乎所有这些都取决于片段是否被保留。保留片段后,onDestroyView上的onCreateView。

当片段被保留时(即setRetainInstance(true)),那么在旋转devicelooks时的日志如下:

com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume

但是当它没有被保留时,就像这样:

com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroy
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume

答案 1 :(得分:2)

看看该图:

States of Activity, Fragment and Fragment Manager

这是所有生命周期状态的显式可视化。享受。

答案 2 :(得分:0)

保留片段时(即setRetainInstance(true)),

如果setRetainInstance(true)然后:-不调用OnDestroy() 再次打开fragemnt然后不调用onCreate()

但是当setRetainInstance(false)时:-然后将所有生命周期片段化