Android - 保留片段?

Android - retaining fragment?

您好,我有一个关于在重新创建 Activity 时保留片段的问题。 我听说一种方法是在 onCreate 方法中使用 setRetainFragment(true) 。 问题是 - 这与跟踪 Activity 中的私有片段 属性 有何不同,以便我在 activity 的整个生命周期中始终拥有相同的片段对象?谢谢!

如果您指的是私有 属性,则表示 class 中的 属性,因此每次 activity 重新创建时,都会有一个包含新私有片段的新实例在 t=t1 为示例创建 Activity A 的实例,因此它包含其所有私有变量,在 t=t2 中创建 Activity A 的新实例,因此当您设置 setRetainFragment(true)引擎盖下的 Android 框架保留您的片段而不重新创建它们并保持其状态。 您可以参考此 link 了解更多信息 Understanding Fragment's setRetainInstance(boolean)

setRetainInstance(true):片段的状态将在配置更改(例如屏幕旋转)时保留(而不是被破坏!)。状态将是 即使配置更改导致 "parent" Activity 被销毁,也会保留。但是,片段的视图被破坏了!

生命周期调用:

  • onPause() -> onStop() -> onDestroyView() -> onDetach()
  • onAttach() -> onCreateView() -> onStart() -> onResume()

setRetainInstance(false): 片段的状态不会在配置更改时保留(默认)。

生命周期调用:

  • onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
  • onAttach() -> onCreate() -> onCreateView() -> onStart() -> onResume()

重要提示:setRetainInstance(true) 不适用于返回堆栈上的片段。 setRetainInstance(true) 对于长 运行 操作特别有用 在不关心配置更改的片段中。