本文有大招,APP內(nèi)存占用從175M優(yōu)化到97M,使用GIMP查看大內(nèi)存圖片。然后針對性優(yōu)化。我相信大家對Memory Analyzer (MAT)并不陌生,但是那里面巨大的對象到底是什么,你不好奇嗎?比如:

APP內(nèi)存占用.png
這個圖里,你知道這11M是什么嗎?如果你已經(jīng)明白我的意思,你可以撤了!如果不能,請繼續(xù)!如果你不會用mat,請看文后補充。
首先,通過list objects 查看incoming references,我們看到了這樣一個東西:

11M的大對象
很明顯,它是一張圖片,相信你也好奇,這是那張圖片呢?現(xiàn)在GIMP登場了。請自行下載。我假設(shè)你已經(jīng)下載好了,現(xiàn)在,我們選中這個mBuffer,然后你可以看到相關(guān)屬性,在屬性頁,我們把這個mBuffer存儲到文件里,如下圖:

存儲mBuffer
存儲的時候,你一定要選擇一個路徑,不要直接輸入文件名,那樣會存儲到mat的目錄去,不好找。存儲的后綴必須是.data,這里,我命名為了big.data,現(xiàn)在,我們用GIMP打開它。

用GIMP查看data數(shù)據(jù)
第一項,你需要選擇下,默認是RGB,需要選為RGB Alpha,寬高你填寫屬性頁看到的即可!然后就可以查看了。
其實,這張圖是我們APP里字號頁的背景!其他圖則是APP里的大圖,對此,我的優(yōu)化方案是:APP里的大圖采用565編碼,小圖8888,比如icon等,因為565可能會讓圖片變綠?。?!這張背景圖,我直接移到了xxxhdpi,第二次運行,然后發(fā)現(xiàn)這張圖只占了2M內(nèi)存。
以上測試是在華為6P上進行的,在大圖沒優(yōu)化前,APP內(nèi)存占用為175M(多次GC后的內(nèi)存占用,另外,導(dǎo)出hprof文件的時候也需要多次GC,否則導(dǎo)出的文件可能不可用!)優(yōu)化后只有97M,執(zhí)行的測試用例是同一個,足見大圖優(yōu)化在APP開發(fā)里何其重要,平時,優(yōu)化3-5M已經(jīng)不易了!如果你對我寫的抱有懷疑,請大膽的下載老字號APP體驗,現(xiàn)在線上版本是未優(yōu)化的,你看下在大分辨率手機上內(nèi)存占用是否很大,當(dāng)下次更新的時候再看看是否還占用很大即可!下面是具體的hprof文件分析圖,第一張是未優(yōu)化的,第二張是優(yōu)化后的。足以清晰的看到內(nèi)存占用,怎么樣,還不快去看看,你的APP是否可以如法優(yōu)化不少內(nèi)存呢?

未優(yōu)化的截圖

優(yōu)化后的截圖
mat的使用
首先,你需要把Android Studio導(dǎo)出的hprof文件轉(zhuǎn)換下,如果你還不會導(dǎo)出,那你百度吧,如果你Android環(huán)境變量沒有配置,那你百度吧。假設(shè)你導(dǎo)出的文件是:1.hprof,現(xiàn)在轉(zhuǎn)換:hprof-conv 1.hprof big.hprof 這個命令就可以將文件轉(zhuǎn)換為big.hprof 了,然后用mat打開,彈出的窗口選第1項即可!如下圖:

選擇分析的內(nèi)容
至于本文第1張圖怎么打開的,那是在override標(biāo)簽下點擊:dominator tree出現(xiàn)的。如果你還有疑問,請評論,我會回復(fù)。