【发布时间】:2016-10-03 21:38:05
【问题描述】:
我已经阅读了一些关于 Android 中单例模式的使用以及它在保留上下文方面的缺点。事实上,当我实现以下代码时:
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。
但是,我可以看到单例实现并推荐 in this page of Android's docs。
如果您的应用程序经常使用网络,那么设置一个可在您的应用程序生命周期内持续使用的 RequestQueue 实例可能是最有效的。您可以通过多种方式实现这一目标。推荐的方法是实现一个封装 RequestQueue 和其他 Volley 功能的单例类。
由于谷歌自相矛盾,有人可以指导我并在这一点上给我建议吗?
【问题讨论】:
-
矛盾在哪里?
-
没有矛盾。第一部分说您不应该将 Android 上下文类 放入单例中。第二部分没有提到将 那些 放入单例中。正确阅读文本并理解其内容非常重要。
-
...that will last the lifetime of your app.可能是指只要上下文对象还活着,对象(单例)就会活着(引用持有),这意味着应该使用应用程序上下文application.getApplicationContext()。 -
@Luis - 如果您从 Google 的文档中复制代码并将其粘贴到 Google 的 IDE 中并收到警告,那就是矛盾了。
标签: java android design-patterns singleton