代码之家  ›  专栏  ›  技术社区  ›  user2386226

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

  •  1
  • user2386226  · 技术社区  · 7 年前

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

    在这里叫它:

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

    谢谢

    2 回复  |  直到 7 年前
        1
  •  9
  •   Anton Potapov    7 年前

    2) 将片段实例设置为 null 当上下文被破坏时(活动在顶部)

    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();
        }
    }
    
        2
  •  1
  •   Moonbloom    7 年前

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

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

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