问题
I have a class that needs to obtain a reference to it's application's AssetManager. This class does not extend any sort of android UI class, so it doesn't have a getContext() method, or anything similar. Is there some sort of static Context.getCurrentApplicationContext() type of method?
To clarify: my class is intended to be used like a library, for other applications. It has no associated AndroidManifest.xml or control over the context which is calling it.
回答1:
- Create a subclass of Application, for instance
public class App extends Application { - Set the
android:nameattribute of your<application>tag in theAndroidManifest.xmlto point to your new class, e.g.android:name=".App" - In the
onCreate()method of your app instance, save your context (e.g.this) to a static field namedappand create a static method that returns this field, e.g.getApp():
This is how it should look:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
Now you can use: App.getContext() whenever you want to get a context, and then getAssetManager() (or App.getContext().getAssetManager()).
回答2:
I am not sure of the best answer to the OP question. However, I do know that you have to be very careful when using a static context as suggested in Android developer resources:
In the
onCreate()method of your app instance, save your context (e.g. this) to a static field named app and create a static method that returns this field, e.g.getApp():
Using static contexts can leak to leaked memory issues, especially if the static context is used for references to views.
来源:https://stackoverflow.com/questions/4410328/how-to-obtain-assetmanager-without-reference-to-context