小编典典

Android-Google在Singleton模式方面的矛盾

java

我已经阅读了一些有关Android中的Singleton模式用法及其在保留Context方面的缺点的信息。实际上,当我实现以下代码时:

private static HttpManager sSingleton;
private Context mContext;

private HttpManager(Context context) {

    mContext = context;
}

public static synchronized HttpManager getInstance(Context context) {

    if (sSingleton == null) {
        sSingleton = new HttpManager(context);
    }

    return sSingleton;
}

Android Studio向我显示以下警告:

不要将Android上下文类放在静态字段中(对HttpManager的静态引用,其中mContext字段指向Context);这是内存泄漏,并且还会中断即时运行。

但是,我可以在此页面的Android文档中看到并实现Singletons

如果您的应用程序不断使用网络,则设置单个RequestQueue实例(这将持续应用程序的生命周期)可能是最有效的。您可以通过多种方式实现这一目标。推荐的方法是实现一个封装RequestQueue和其他Volley功能的单例类。

由于Google自身存在矛盾,因此有人可以在这方面指导我并提出建议吗?


阅读 220

收藏
2020-11-16

共1个答案

小编典典

既然Google在自相矛盾

不它不是。

引用的Lint警告不是抱怨创建单例。它在抱怨创建单例持有对任意的引用Context,因为这可能像一个Activity。希望通过更改mContext = contextmContext = context.getApplicationContext(),您将摆脱该警告(尽管可能仍然会中断即时运行-
我不能对此发表评论)。

只要您非常小心地创建单例,就可以避免内存泄漏(例如,对持有不确定的static引用Activity)。

2020-11-16