应用程序保持'从字体缓存中清除'并最终因内存不足而崩溃,android

Emm*_*sin 1 crash fonts android caching

我正在建立一个应用程序的开始(它甚至没有做任何事情,但显示一些按钮),当我运行它时,我在logcat中收到错误消息:"从字体缓存中清除193K [23个条目] "一遍又一遍,直到大约一分钟后,应用程序因内存不足而崩溃.我的3个按钮是自定义按钮,使用自定义字体.也许是字体问题?

tbr*_*aun 6

问题是调用Typeface.createFromAsset().

我已经减少了创建字体工厂的功能,因此每个字体类型调用一次Typeface.createFromAsset().

字体工厂将字体保存在散列映射中,并且可以解决这个问题.

我在这个链接上找到了解决方案并进行了一些调整:

http://www.levinotik.com/2011/09/22/custom-fonts-in-android-can-cause-issues-heres-how-to-fix-it/

这就是我实现它的方式.

public class FontFactory {
    private static FontFactory instance = new FontFactory();
    private HashMap<String, Typeface> fontMap = new HashMap<String, Typeface>();

    private FontFactory() {
    }

    public static FontFactory getInstance() {
        return instance;
    }

    public Typeface getFont(String font) {
        Typeface typeface = fontMap.get(font);
        if (typeface == null) {
            typeface = Typeface.createFromAsset(MyApplication.getApplicationContext().getResources().getAssets(), "fonts/" + font);
            fontMap.put(font, typeface);
        }
        return typeface;
    }
}
Run Code Online (Sandbox Code Playgroud)