Android WeakReference 处理内存泄漏

Android WeakReference to handle memory leakage

请检查以下代码, 我们可以在 Utils class 中使用像下面这样的 WeakReferences 来处理上下文内存泄漏吗?

private static final String TAG = "Utils";
private static Utils instance;
private Context context;

public Utils(WeakReference<Context> context) {
    this.context = context.get();
}

public static synchronized final Utils getInstance(Context context) {
    if (instance == null) {
        instance = new Utils(new WeakReference<Context>(context));
    }
    return instance;
}

private WeakReference<Context> context;

在构造函数中:(如果你想创建单例,请将其设为私有 class)

this.context = context;

其他一切看起来都不错。

您可以使用 Leak Canary 检查内存泄漏。它做同样的事情,但只有一行代码。它会告诉你每次内存泄漏的根源。

不,WeakReference 可以在任何时候 return null,所以它使这种毫无意义。

您将在每次访问 WeakReference 时检查它是否为 null,然后您将需要通过在方法参数中提供上下文来处理这种情况,因此无需将上下文存储在领域。

更好(但不是最好)的解决方案是使用 ApplicationContext,context.getApplicationContext(),可能最好的方法是将上下文传递到每个方法调用中。