Android SetRetainInstanceState的最佳实践?

Android SetRetainInstanceState的最佳实践?,android,memory-management,android-fragments,Android,Memory Management,Android Fragments,我目前在碎片生命周期管理方面遇到问题。 如果片段所在的活动被重新创建,我已设置SetRetainInstanceState(true)以保持片段实例的活动状态 然而,这导致我的观点出现了一些奇怪的行为。有时,我会收到一些关于活动上下文的片段视图和空指针异常的内存泄漏警告 想要确保正确保留片段实例:关于保留片段(保留什么、销毁什么)的最佳实践是什么?SetRetainInstanceState(true)确保Android在重新创建活动时保留片段。因此,在活动重新创建之后,片段首先附加到的活动不再

我目前在碎片生命周期管理方面遇到问题。 如果片段所在的活动被重新创建,我已设置SetRetainInstanceState(true)以保持片段实例的活动状态

然而,这导致我的观点出现了一些奇怪的行为。有时,我会收到一些关于活动上下文的片段视图和空指针异常的内存泄漏警告

想要确保正确保留片段实例:关于保留片段(保留什么、销毁什么)的最佳实践是什么?

SetRetainInstanceState(true)确保Android在重新创建活动时保留片段。因此,在活动重新创建之后,片段首先附加到的活动不再存在,并且片段附加到新的活动实例

为了确保这一切顺利进行,请记住以下几点:

除非绝对必要,否则不要在片段中保留对附加活动的引用。改为使用
getActivity()
方法,该方法将始终返回当前附加的片段(如果未附加任何内容,则返回null)

如果您必须对当前附加的活动有一个“永久引用”(您可能希望在其中重新考虑您的设计),请确保在onAttach和onDetach方法中更新此引用


确保没有保留使用活动作为上下文初始化的对象(通常是视图、适配器等)。为此,重写在活动重新创建之前调用的Fragments
onDestroyView()
方法。在这里,您可以处理片段仍然有活动引用的视图和适配器(通常只需将它们的引用设置为null就足够了)。然后,您可以在
onCreateView
调用中使用新上下文重新创建片段的视图和适配器。

谢谢!还有一个问题,如果我保留对视图相关信息的引用(如用于确定listview滚动位置的整数或浮点)是否可以?任何未引用应用程序上下文之外的上下文或活动的对象都可以安全地保留。这包括表示视图状态的整数或对象。