This might be a simple question but I just wanted to make sure I am right.
In my android application I have a constructor that uses:
activity.getApplicationContext()
The activity is passed into the constructor as a parameter.
The problem is that I am calling this class from a Service. If I make a second constructor which accepts the Service as a parameter and uses service.getApplicationContext
? Will I get the same application context?
Application Context add Activity Context both are different.Downcasting is risky .Use this code to use context object .
In Your Activities and in fragments Class :
Conetext context=App.context;
You can go for
getApplicationContext()
if you wanna get context of whole application. If you want to get context of current class you can usegetBaseContext()
instead.There is only one application context, so you should get the same one. You can have just one constructor that takes a
Context
, you don't really need two. Or if you wanted to make sure that you are getting the application context, and not, say, an activity one, you can have your constructor takeApplication
as a parameter which is aContext
.I have adapted yuku's answer with a non static direct context reference.
Create a class
domain.company.pseudo.ApplicationName
which extendsandroid.app.Application
.In this sample, my full application package name is
hypersoft.systems.android.starbox
.Now, modify your AndroidManifest.xml
<application>
tag to have the attributeandroid:name="hypersoft.systems.android.Starbox"
, and be sure theStarbox.java
class file is located in the project component directory:android
rather thanstarbox
.With all this done, you can now
import hypersoft.systems.android.Starbox
, and in your code you can get theApplicationContext
by callingStarbox.instance.getApplicationContext()
Successfully compiling with build tools 26 and api 26 (Android 8.0) with min sdk version 14 (4.0).
The easiest way to get the application context is:
Create a class
App
that extendsandroid.app.Application
Modify your
AndroidManifest.xml
's<application>
tag to have the attributeandroid:name="your.package.name.App"
.Any time you need the application context, just get it from
App.context
.Application
is always initialized first whether your process runs, whether it's an activity, a service, or something else. You will always have access to the application context.Will I get the same application context?
Yes. You can check the android documentation, they have provided
Return the context of the single, global Application object of the current process.
So it should not be changed for the whole application process.
Please also take a note of this:
getApplicationContext()
generally should only be used if you need a Context whose lifecycle is separate from the current context, that is tied to the lifetime of the process rather than the current component.Correct me if I'm wrong.
Thanks