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

Mar*_*lka 18 android android-fragments

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

  1. 调用适当的回调,销毁视图然后销毁片段
  2. 调用回调,销毁视图,但保持片段本身存活

在哪种情况下完成了两种替代方案中的哪一种?是什么决定了他们中的哪一个?如果将一个片段添加到后台堆栈中,然后删除/替换,为什么不将它丢弃?为什么要保留它?

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

在此输入图像描述

Mar*_*lka 33

这似乎都取决于片段是否保留.当片段被保留时,然后在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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • @Vivek 不要过度依赖`onDestroyView`。它很少被使用,因为所有未使用的对象都可以被 GC 自动收集。如果您确实需要它,可以将代码移至“onPause”并使用“onPause/onResume”对来保存/加载状态。 (2认同)

Ole*_*nko 12

看一下图表:

活动状态、片段和片段管理器

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