我不断收到静态片段实例内存泄漏的警告。 我声明如下:
private static myFragment thisFragment;
并在此处致电:
public static myFragment newInstance() {
if (thisFragment == null) {
thisFragment = new myFragment();
}
return thisFragment;
}
我该如何解决这个问题?任何想法?
谢谢!
答案 0 :(得分:5)
嗯,有三种可能的解决方案:
1)不创建静态片段。它们总是与上下文绑定,因此,它们不应该是静态的。考虑重构您的应用程序架构。
2)在销毁上下文时将片段实例设置为null
(活动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();
}
}
答案 1 :(得分:1)
你永远不应该永远持有对Context的静态引用。
为什么需要对片段进行静态引用?如果您回答这个问题,那么我们可以指导您如何避免它。
静态引用永远不会消亡,并且该片段上下文很可能在某个时刻链接到Activity上下文,这意味着所有这些元素永远不会被垃圾回收。这真的很糟糕。