在開發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);