如何避免静态片段上下文的内存泄漏?

How do I avoid a memory leak from a static fragment context?

我不断收到关于我的静态片段实例内存泄漏的警告。 我声明如下:

私有静态 myFragment thisFragment;

并在这里调用它:

public static myFragment newInstance() {

        if (thisFragment == null) {
            thisFragment = new myFragment();
        }
        return thisFragment;
    }

我该如何解决这个问题?有什么想法吗?

谢谢!

那么,有 3 种可能的解决方案:

1) 不创建静态片段。它们总是绑定到上下文,因此,它们不应该是静态的。考虑重构您的应用架构。

2) 当上下文被销毁时将片段实例设置为 null (activity onStop)

3) 将 WeakReference 用于 fragment 字段,它不会保存来自 GC 的实例。

UPD: 示例 3)

class ExampleFragment extends Fragment {

    private static WeakReference<Fragment> instance;

    public static ExampleFragment getInstance() {
        if (instance == null) {
            instance = new WeakReference<>(new ExampleFragment());
        }
        return instance.get();
    }
}

您永远不应该持有对上下文的静态引用。

为什么需要保存对片段的静态引用?如果您回答了这个问题,那么我们可以指导您如何避免它。

静态引用永不消亡,片段上下文很可能在某个时候链接到 Activity 上下文,这意味着所有这些元素永远不会被垃圾收集。这真的很糟糕。