如何在不参考Context的情况下获取AssetManager?

时间:2010-12-10 15:23:23

标签: android android-context

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

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

2 个答案:

答案 0 :(得分:23)

  1. 创建Application的子类,例如public class App extends Application {
  2. android:name<application>标记的AndroidManifest.xml属性设置为指向新类,例如android:name=".App"
  3. 在您的应用实例的onCreate()方法中,将您的上下文(例如this)保存到名为app的静态字段,并创建一个返回此字段的静态方法,例如getApp()
  4. 这应该是它的样子:

    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()

使用静态上下文可能会泄漏到泄漏的内存问题,尤其是在静态上下文用于引用视图的情况下。