0

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

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

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

4

1 回答 1

1

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

为确保一切顺利,请记住以下事项:

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

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

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

于 2013-11-11T15:27:48.537 回答