2011-04-08 62 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()類是這樣的:

這並不解決問題。仍然資產重複。