每次在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实例?
答案 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;
}
这并不能解决问题。仍有资产重复。