我一直在阅读关于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功能的单例类。
由于谷歌自相矛盾,有人可以指导我并就此提出建议吗?
答案 0 :(得分:16)
由于谷歌自相矛盾
不,不是。
引用的Lint警告并没有抱怨创建单身人士。它抱怨创建单身人士持有对任意Context
的引用,因为这可能类似于Activity
。希望通过将mContext = context
更改为mContext = context.getApplicationContext()
,您将摆脱该警告(尽管有可能这仍然会破坏Instant Run - 我无法对此发表评论)。
创建单例是好的,只要你非常小心地这样做,以避免内存泄漏(例如,对static
保持无限期Activity
引用。
答案 1 :(得分:-1)
这确实是一个矛盾,因为在许多单身人士中你需要一个背景。看看这篇文章,我现在正在使用这种方法来避免android studio中的警告: