21

我有一个类需要获取对其应用程序的引用AssetManager。此类不扩展任何类型的 android UI 类,因此它没有getContext()方法或类似的东西。是否有某种静态Context.getCurrentApplicationContext()类型的方法?

澄清一下:我的课程旨在像图书馆一样用于其他应用程序。AndroidManifest.xml它对调用它的上下文没有关联或控制。

4

2 回答 2

27
  1. 创建 的子类Application,例如public class App extends Application {
  2. 将标签的android:name属性设置为指向您的新类,例如<application>AndroidManifest.xmlandroid:name=".App"
  3. 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())。

于 2010-12-10T15:25:37.657 回答
7

我不确定 OP 问题的最佳答案。但是,我知道在使用Android 开发人员资源中建议的静态上下文时必须非常小心:

onCreate()您的应用程序实例的方法中,将您的上下文(例如 this)保存到名为 app 的静态字段并创建一个返回此字段的静态方法,例如getApp()

使用静态上下文可能会导致内存泄漏问题,尤其是在静态上下文用于对视图的引用时。

于 2010-12-26T22:50:20.260 回答