Activity Context vs Application Context

Brian Nicholson bnicholson at mozilla.com
Wed Feb 12 11:38:00 PST 2014


A worthy read: http://www.doubleencore.com/2013/06/context/

When using Contexts, there are several different context types
(Application, Activity, Service, etc. -- all mentioned in the link
above). In the front-end code, the Application Context and Activity
Context are the easiest to misuse.

If you're doing anything UI-related, you *must* use the Activity
Context. For example, this line showing a Toast looks innocuous
enough: http://hg.mozilla.org/mozilla-central/file/879038dcacb7/mobile/android/base/home/HomeFragment.java#l157.
But when you look at the Context being used, it's actually the
Application Context. Red flag!

On the other hand, when storing Context for long-lived objects
(especially singletons), make sure you don't hold onto the Activity
Context since that can result in memory leaks (An Activity can be
recreated in the same Application instance). Better options are either
a) pass the Activity Context to any methods requiring one, or b) if
only the Application Context is needed, store the Application Context
instead (e.g., http://mxr.mozilla.org/mozilla-central/source/mobile/android/base/Tab.java#89).
But be careful not to use this Context for anything UI-related for the
reasons above.

In short, all Contexts are not created equal, so we need to be careful
how we use them.

Brian


More information about the mobile-firefox-dev mailing list