Android资产分配错误

时间:2011-04-08 15:56:37

标签: android memory instance memory-leaks assets

每次在app(动态壁纸)字体首选项中发生更改时,我都需要创建一个新的字体。

为此,我在壁纸引擎中的onSharedPreferenceChanged()中创建了一个字体,这样:

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {

         typeface = prefs.getString("customize_font_settings", "MyFont.ttf");
         AssetManager assmManager = App.getContext().getAssets();
         font = Typeface.createFromAsset(assmManager, typeface);

其中 App.getContext()。getAssets()是指静态实例,以便正确获取AssetManager。

事实是,每次 onSharedPreferenceChanged()时,都会创建一个新的AssetManager实例,使其很容易溢出内存。

如何创建一个将保持静止且不会自行克隆的AssetManager的SINGLE实例?

2 个答案:

答案 0 :(得分:0)

在App中,为什么不创建一个静态函数来返回对资产管理器的静态引用?你已经到了一半。

应用

public static AssetManager getManager(){
   if(this.assetManager == null) AssetManager this.assetManager = this.getAssets();

   return this.assetManager;

}

共享

font = Typeface.createFromAsset(App.getManager(), typeface);

答案 1 :(得分:0)

我以这种方式编辑App类以使sgarman代码工作,但这并没有解决问题:

首先,我不能用“这个”。在静态上下文中,所以我不得不以这种方式重写 getManager()类:

    private static AssetManager assetManager;


    public static AssetManager getManager(){

        if(assetManager == null) assetManager = mContext.getAssets();

           return assetManager;

        }

这并不能解决问题。仍有资产重复。