这个Android示例是否可以安全使用,内存泄漏?

Maa*_*ten 5 android memory-leaks android-fragments

在阅读Fragments时,我遇到了与活动进行通信的这一部分,其中包含以下代码片段:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (OnArticleSelectedListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
    }
}
Run Code Online (Sandbox Code Playgroud)

不知怎的,我觉得碎片不应该包含对它们的引用Activity,但我真的不知道这种直觉来自何处.

感觉好像上面的代码可引起了内存泄漏时setRetainInstance()被设定为true,因Activity而可以在取向变化重新启动Fragment被保留,包含旧的参考Activity.(这是真的?)

但这种模式是否可以安全地使用setRetainInstance()set false

Com*_*are 1

不知怎的,我觉得片段不应该包含对其活动的引用,

他们已经这样做了。否则该getActivity()方法就无法发挥作用。

我觉得当 setRetainInstance() 设置为 true 时,上面的代码可能会导致内存泄漏,因为 Activity 可能会在方向更改时重新启动,而 Fragment 被保留,包含对旧 Activity 的引用。(这是真的?)

onAttach()对于新活动,将再次调用,因此虽然您会非常短暂地泄漏内存,但我不会担心它。