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

Nad*_*lli 5 java singleton android design-patterns

我一直在阅读关于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;
}
Run Code Online (Sandbox Code Playgroud)

Android Studio向我显示以下警告:

不要将Android上下文类放在静态字段中(静态引用HttpManager,其中字段mContext指向Context); 这是内存泄漏,也会破坏Instant Run.

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

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

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

Com*_*are 17

由于谷歌自相矛盾

不它不是.

引用的Lint警告并没有抱怨创建单身人士.它抱怨创建单身人士持有任意的参考Context,因为这可能是一个像Activity.我们希望,通过改变mContext = contextmContext = context.getApplicationContext(),你将摆脱这一警告的(虽然它是可能的,这仍然打破即时运行-我真的不能作出评论).

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

  • @Ozuf:正确.`Application`上下文是一个预先存在的单例.它实际上是预泄漏的.你不能以某种方式泄漏它.:-) (4认同)
  • @NadiaCastelli:Lint检查需要改进.请参阅[此问题](http://code.google.com/p/android/issues/detail?id=223557). (3认同)