android - 如何避免静态 fragment 上下文的内存泄漏?

标签 android android-fragments memory-leaks android-context android-memory

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

私有(private)静态myFragment thisFragment;

并在这里调用它:

public static myFragment newInstance() {

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

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

谢谢!

最佳答案

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

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

2) 当上下文被销毁时将 fragment 实例设置为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();
    }
}

关于android - 如何避免静态 fragment 上下文的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45494660/

相关文章:

android - Robolectric + 改造 + 单元测试

android - 如何根据 API 响应触发应用内导航

Android 5.0 Toolbar fragment backstack

ios - NSMutableDictionary initWithContentsOfFile 中的内存泄漏

Android Activity Lifecycle和Singleton以及相互引用持久化(内存泄漏)

c - 释放调用者中由被调用者重新分配的内存?

Android Oreo 8.0+ 禁用网络权限问题

android studio 从默认键盘打开表情符号键盘

android - 在嵌套 fragment 中运行多个 AsyncTasks 时挂起线程,这会使应用变慢

android - 切换选项卡时重置 fragment 后退堆栈