A Real Use for getApplicationContext()!
getApplicationContext() is a seriously overused method.
Most times where I see it, using this would work just as
well, if not better.
One case where getApplicationContext() can be useful,
though, lies in the intersection of sticky broadcasts and
BroadcastReceiver, as discovered through discussions
on this StackOverflow question.
A sticky broadcast is one where Android holds onto the last
Intent that was broadcast for that action. You can get that
last Intent by calling registerReceiver(), with an IntentFilter
that matches the action, but a null BroadcastReceiver.
Things get tricky, though, if you try doing that from
the onReceive() method of a manifest-registered BroadcastReceiver,
such as an app widget implementation. If you use the Context
object that is passed into onReceive() and call registerReceiver()
on it, you get an error. The error complains about a BroadcastReceiver
registering another BroadcastReceiver, despite the fact that,
in this case, you’re actually just trying to get a sticky
broadcast Intent value.
The workaround, as Ms. Hackborn pointed out, is to use
getApplicationContext(). That Context object will
support the registerReceiver() call, so you can get the
sticky broadcast Intent value you seek.

