我有一个类需要获取对它的应用程序AssetManager
的引用。此类不扩展任何类型的Android UI类,因此它没有getContext()
方法或类似的东西。是否存在某种静态Context.getCurrentApplicationContext()
类型的方法?
澄清一下:我的课程旨在像图书馆一样用于其他应用程序。它没有关联的AndroidManifest.xml
或对正在调用它的上下文的控制。
答案 0 :(得分:23)
Application
的子类,例如public class App extends Application {
android:name
中<application>
标记的AndroidManifest.xml
属性设置为指向新类,例如android:name=".App"
onCreate()
方法中,将您的上下文(例如this
)保存到名为app
的静态字段,并创建一个返回此字段的静态方法,例如getApp()
:这应该是它的样子:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
现在,您可以在需要获取上下文时使用:App.getContext()
,然后使用getAssetManager()
(或App.getContext().getAssetManager()
)。
答案 1 :(得分:7)
我不确定OP问题的最佳答案。但是,我知道在使用Android developer resources中建议的静态上下文时必须非常小心:
在您的应用实例的
onCreate()
方法中,将您的上下文(例如this)保存到名为app的静态字段,并创建一个返回此字段的静态方法,例如getApp()
:
使用静态上下文可能会泄漏到泄漏的内存问题,尤其是在静态上下文用于引用视图的情况下。