12/08/2018, 17:16
Application Context vs Activity Context
Defining Application Context: This context is tied to the lifecycle of an application Activity Context: This context is tied to the life cycle of an activity Allow using Application Activity Service ContentProvider BroadcastReceiver Show Dialog NO YES NO NO NO ...
Defining
Application Context: This context is tied to the lifecycle of an application
Activity Context: This context is tied to the life cycle of an activity
Allow using
Application | Activity | Service | ContentProvider | BroadcastReceiver | |
---|---|---|---|---|---|
Show Dialog | NO | YES | NO | NO | NO |
Start an Activity | NO (YES if we use flag NEW_TASK) | YES | NO | NO | NO |
Layout Inflation | NO | YES | NO | NO | NO |
Start a Service | YES | YES | YES | YES | YES |
Bind to Service | YES | YES | YES | YES | NO |
Send Broadcast | YES | YES | YES | YES | YES |
Register Broadcast Receiver | YES | YES | YES | YES | NO |
Load Resource Values | YES | YES | YES | YES | YES |
Suggest using
Application | Activity | |
---|---|---|
Create Singleton object which require a Context | Should use. Because if we use ActivityContext here, the Singleton object will keep the reference to activity and the activity will not be garbage collected => memory leak | Shouldn't use |
Use a object in Library which require a Context | Should use | Shouldn't use |
Do some thing with GUI | Almost can not do, it will return WindowManager$$adTokenException: Unable to add window -- token null is not for an application. It is not complete Context that supporting everything that Activity does | -- |
Show Toast | Same, Currently I think we can use ApplicationContext or ActivityContext because no document say which is better but I think we should use ActivityContext because some good developer say only use ApplicationContext when we really need it (https://stackoverflow.com/a/5228494/5381331) some post say ApplicationContext may crash in some few device(https://stackoverflow.com/a/36032279/5381331) and some developer say Toast is is UI so we should use ActivityContext (however in some case we show Toast outside of Activity so we need ApplicationContext). Conclusion, feel free to use both of theme is same | Same |
Load resource | The same with Toast | The same with Toast |
Normal object which require a Context (tied with Activity life cycle) | Shouldn't use because it simple not necessary and suitable | Should use |
Context returned
MainActivity.this -> return Activity context
getBaseContext() -> return Activity context
getApplicationContext -> return Application context
Reference
https://stackoverflow.com/a/7298955/5381331 https://stackoverflow.com/a/5228494/5381331 https://possiblemobile.com/2013/06/context/