I've been reading a bit about Singleton pattern usage in Android and its disadvantages regarding to keeping the Context. In fact, when I implement the following code:
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 shows me the following warning:
Do not place Android context classes in static fields (static reference to HttpManager which has field mContext pointing to Context); this is a memory leak and also breaks Instant Run.
However, I can see Singletons implemented and recommended in this page of Android's docs.
If your application makes constant use of the network, it's probably most efficient to set up a single instance of RequestQueue that will last the lifetime of your app. You can achieve this in various ways. The recommended approach is to implement a singleton class that encapsulates RequestQueue and other Volley functionality.
Since Google is contradicting itself, can someone guide me and advise me on this point?
...that will last the lifetime of your app.
probably refers that the object (singleton) will be alive (reference held) as long as the context object is alive, this implies that application contextapplication.getApplicationContext()
should be used. – Calchas