> > No, Diane is saying that you can say > Singleton.getInstance(context.getApplication()) to pass the > Application reference to the singleton and it will be used to > initialize the singleton if not already. > No, Diane was clearly saying Singleton.getInstance(context) to pass context (not the application) reference to the singleton (and it will be used to initialize the singleton if not initialized already). And passing context of random activities to initialize a singleton will result in the problems described earlier.
Consistently calling Singleton.getInstance(context.getApplicationContext()) or Singleton.getInstance(context.getApplication()) will avoid memory leaks and dead context problems, but the signature of the Singleton.getInstance(Context) does not ensure that the method will always be called with the application context as the parameter, which is not the best choice from API design perspective. Having a method Singleton.getInstance(Application) instead of Singleton.getInstance(Context) will ensure that no activity context will be used to initialize the Singleton object. But from API design perspective this method signature is not the best one because the actual parameter will only be used once and ignored all other times. Using new NormalObject(Application) instead of Singleton.getInstance(Application) is a cleaner API. > Specifically, the case for me where Application.onCreate() is > > necessary is initializing singletons in this way. I have a lot of non- > Android java code that hide the details of being run inside or outside > of Android, and singletons are no exception. If running in Android, I > want a version of my singleton to use a context. If not Android, a > version with no context (something else). I need the > Application.onCreate() entry point to establish this configuration for > me or be forced to put that line of init code into every component's > onCreate, which is horrible. > This is exactly what I meant when I said "Application.onCreate() would be the best place to initialize singletons that require a context" -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

