androidの设置字体样式引起应用程序运行时占用内存过大
相关涉及到内存优化问题:
在实际开发android项目过程中,由于是初次设置android系统没有的字体,所以用到了一个外部文件FounderFineRoundSimplified.ttf。为了让这个文件随apk一起打包进入应用,需要将该文件放在assets/fonts目录下,fonts是手动在assets目录下创建的目录,是为了方便管理。
在应用程序用,由于整个应用程序凡是涉及到设置字体的,我都在即将要使用的地方使用了:Typeface fontFace = Typeface.createFromAsset(getAssets(),"fonts/FounderFineRoundSimplified.ttf"); 这句话来创建一个字体对象,由于使用的比较多,所以到后来程序中很多位置出现了这条语句。等到我把整个程序开发完毕之后做测试时,发现我的这个应用程序非常的占内存,一运行起来就要占用200M,这个数字的非常的恐怖的,很少见到一个简单的应用程序运行时需要这么多内存的,后来通过屏蔽语句一句一句的排除,发现,就是这条语句,每次创建时都会占用大约5M的内存,程序中我是用的位置,应该不在20条以下了,所以才会出现,无论如何我怎么精简我的其他部分程序都无法将运行内存降低下去,知道我把这条语句都屏蔽之后,占用内存奇迹般的减少了。但是由于程序中任然需要使用到字体设置,所以我将这条语句放在了application 中这样就达到了在整个运用程序中只需一条这个语句就可以设置所有字体了。
目的调用中只创建一次对象即可。
我们可以打印: adb shell dumpsys meminfo 包名
我们发现会打印很多行
zip:/data/app/com.blueberry.xinli-1.apk:/assets/fonts/yuehei.otf: 1380K
zip:/data/app/com.blueberry.xinli-1.apk:/assets/fonts/yuehei.otf: 1380K
zip:/data/app/com.blueberry.xinli-1.apk:/assets/fonts/yuehei.otf: 1380K
zip:/data/app/com.blueberry.xinli-1.apk:/assets/fonts/yuehei.otf: 1380K
zip:/data/app/com.blueberry.xinli-1.apk:/assets/fonts/yuehei.otf: 1380K放在application后,占用内存小多了,创建一次对象即可。挺实用的。
private static Typeface localTypeface;
在oncreate()添加。
//初始化字体样式
localTypeface = Typeface.createFromAsset(getAssets(),"fonts/yuehei.otf");然后调用这个样式方法
public static Typeface setFontType(Context context) {
return localTypeface;
}