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

我一直在阅读关于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。

但是,我可以在Android的文档页面中看到Singletons的实现和推荐。

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

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

由于谷歌自相矛盾

不它不是。

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

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

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

具有全局上下文的Android Singleton