2011-04-08 59 views
0

每次在应用程序(动态壁纸)字体首选项中发生更改时,我都需要创建一个新的字体。Android资产分配错误

要做到这一点,我在我的壁纸引擎创建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实例,该实例将保持不动,并且不会克隆自身?

回答

0

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

应用

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

    return this.assetManager; 

} 

共享

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

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

首先,我不能使用“这个”。在静态情况下,让我不得不重新写getManager()类是这样的:

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