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

0 android memory-leaks android-context android-fragments android-memory

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

私有静态myFragment thisFragment;

并在这里调用:

public static myFragment newInstance() {

        if (thisFragment == null) {
            thisFragment = new myFragment();
        }
        return thisFragment;
    }
Run Code Online (Sandbox Code Playgroud)

我该如何解决?有任何想法吗?

谢谢!

Ant*_*pov 6

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

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

2)将片段实例设置为null上下文被破坏时(activity onStop)

3)对片段字段使用WeakReference,它将不保存来自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();
    }
}
Run Code Online (Sandbox Code Playgroud)