在开发android app的开发过程中,会使用到外部的一些字体。外部字体在加载的时候,容易造成内存泄漏。

比如:

Typeface tf=Typeface.createFromAsset(getAssets(), Consts.LANTING_FONT_PATH);title.setTypeface(tf);

如果在每次调用的时候都这样写,会造成每次执行的时候都会重新加载一次该字体,导致内存不断变大。

跑monkey测试的时候,执行:

adb shell  dumpsys meminfo 【packgename】  

此命令会打出当前应用内存占用情况,如下:

** MEMINFO in pid 26390 [packgemane] **                   Pss  Private  Private  Swapped     Heap     Heap     Heap                 Total    Dirty    Clean    Dirty     Size    Alloc     Free                ------   ------   ------   ------   ------   ------   ------  Native Heap        0        0        0        0    24372    23593      758  Dalvik Heap    30256    30020        0        0    39116    34608     4508 Dalvik Other     2254     2180        0        0        Stack      132      132        0        0       Cursor        8        8        0        0    Other dev        4        0        4        0     .so mmap      998      816       12        0    .apk mmap     1795        0     1636        0    .ttf mmap      115        0       76        0    .dex mmap     1215       56      980        0   Other mmap      406        4       88        0      Unknown    22295    22292        0        0        TOTAL    59478    55508     2796        0    63488    58201     5266 Objects               Views:      840         ViewRootImpl:        7         AppContexts:        6           Activities:        4              Assets:       39        AssetManagers:       39       Local Binders:       47        Proxy Binders:       29    Death Recipients:        0     OpenSSL Sockets:        0 SQL         MEMORY_USED:      296  PAGECACHE_OVERFLOW:      136          MALLOC_SIZE:       62 DATABASES      pgsz     dbsz   Lookaside(b)          cache  Dbname         4      116             80        28/19/5  /××××××4       16            110         9/18/4  /×××××× Asset Allocations    zip:/system/app/×××××.apk:/assets/fonts/Roboto-Light.ttf: 366K    zip:/system/app/×××××.apk:/assets/fonts/Lantinghei.TTF: 2344K    zip:/system/app/×××××.apk:/assets/fonts/CoreSansM25ExtraLight.ttf: 210K    zip:/system/app/×××××.apk:/assets/fonts/CoreSansM25ExtraLight.ttf: 210K    ...  ...   ...    zip:/system/app/×××××.apk:/assets/fonts/CoreSansM25ExtraLight.ttf: 210K

从日志可以看出CoreSansM25ExtraLight这个字体被加载了多次,导致内存泄漏。

如和解决字体内存泄漏呢?方法很简单:

将字体定义为常量,仅在oncreate方法中进行初始化即可。

Consts.TF_CORESANS_FONT  =  Typeface.createFromAsset(getAssets(), Consts.CORESANS_FONT_PATH);

更多相关文章

  1. Android调用.NET Webservice报org.ksoap2.serialization.SoapPri
  2. Android(安卓)后台任务(五)Service
  3. 【android测试】值得学习的android测试知识连接
  4. Android(安卓)获取内存信息
  5. 我是新手,我在学Android
  6. 理解Android中垃圾回收日志信息
  7. android 设置bitmap 设置图片的大小
  8. Android:计算剩余内存
  9. 如何避免android上的进程的内存限制

随机推荐

  1. android添加联系人(直接添加到联系人数据
  2. Android(安卓)FragmentTabHost轻松实现微
  3. android 2.2 apidemos 赏析笔记 5
  4. Android(安卓)Circular Progress Button
  5. android 4.0 HttpURLConnection. getInpu
  6. android 遍历控件
  7. android 判断字符串是否是数字
  8. Android(安卓)xml定义常量
  9. android nfc(官方翻译)
  10. android常用的系统调用