android加載字體內存泄漏的處理方法

在開發android app的開發過程當中,會使用到外部的一些字體。外部字體在加載的時候,容易形成內存泄漏。android

好比:shell

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

若是在每次調用的時候都這樣寫,會形成每次執行的時候都會從新加載一次該字體,致使內存不斷變大。app

跑monkey測試的時候,執行:ide

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這個字體被加載了屢次,致使內存泄漏。字體

如和解決字體內存泄漏呢?方法很簡單:spa

將字體定義爲常量,僅在oncreate方法中進行初始化便可。日誌

Consts.TF_CORESANS_FONT  =  Typeface.createFromAsset(getAssets(), Consts.CORESANS_FONT_PATH);
相關文章
相關標籤/搜索