我已经阅读了一些有关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自身存在矛盾,因此有人可以在这方面指导我并提出建议吗?
既然Google在自相矛盾
不它不是。
引用的Lint警告不是抱怨创建单例。它在抱怨创建单例持有对任意的引用Context,因为这可能像一个Activity。希望通过更改mContext = context为mContext = context.getApplicationContext(),您将摆脱该警告(尽管可能仍然会中断即时运行- 我不能对此发表评论)。
Context
Activity
mContext = context
mContext = context.getApplicationContext()
只要您非常小心地创建单例,就可以避免内存泄漏(例如,对持有不确定的static引用Activity)。
static