This is my preferred approach for implementing a singleton that needs a
Context:
static final Object sLock = new Object();
static MySingleton sInstance;
static MySingleton getInstance(Application app) {
synchronized (sLock) {
if (sInstance == null) {
sInstance = new MySingleton(app);
}
return sInstance;
}
}
The locking is very explicit and controlled. I think that using double null
checks for this kind of stuff is very premature optimization, you'd be
better off calling the method once when you need the instance and keeping
the pointer around.
The method takes an Application object instead of a Context to prevent
mistakes where the developer hands in a transient Context such as for an
Activity. Another way to deal with that though is to explicitly retrieve
the application context from any given context:
static final Object sLock = new Object();
static MySingleton sInstance;
static MySingleton getInstance(Context context) {
synchronized (sLock) {
if (sInstance == null) {
sInstance = new MySingleton(
context.getApplicationContext());
}
return sInstance;
}
}
On Fri, Jun 3, 2011 at 10:14 AM, Chris <[email protected]> wrote:
> Not really, but to the thread in general.
>
> Since this has gotten off topic of Android development, I'd like to try to
> pull it back...
>
> Mark if you're still paying attention, how would this come up within the
> context of .. a Context? I'm having trouble seeing a useful example.
>
> --
> 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
>
--
Dianne Hackborn
Android framework engineer
[email protected]
Note: please don't send private questions to me, as I don't have time to
provide private support, and so won't reply to such e-mails. All such
questions should be posted on public forums, where I and others can see and
answer them.
--
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