Android - 谷歌对单身人士模式的矛盾

时间:2016-10-03 21:38:05

标签: java android design-patterns singleton

我一直在阅读关于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);这是内存泄漏,也会破坏Instant Run。

但是,我可以看到Singletons的实施和推荐in this page of Android's docs

  

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

由于谷歌自相矛盾,有人可以指导我并就此提出建议吗?

2 个答案:

答案 0 :(得分:16)

  

由于谷歌自相矛盾

不,不是。

引用的Lint警告并没有抱怨创建单身人士。它抱怨创建单身人士持有对任意Context的引用,因为这可能类似于Activity。希望通过将mContext = context更改为mContext = context.getApplicationContext(),您将摆脱该警告(尽管有可能这仍然会破坏Instant Run - 我无法对此发表评论)。

创建单例是好的,只要你非常小心地这样做,以避免内存泄漏(例如,对static保持无限期Activity引用。

答案 1 :(得分:-1)

这确实是一个矛盾,因为在许多单身人士中你需要一个背景。看看这篇文章,我现在正在使用这种方法来避免android studio中的警告:

Android Singleton with Global Context