老字號(hào)APP內(nèi)存優(yōu)化-從175M到97M

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


APP內(nèi)存占用.png

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


11M的大對(duì)象

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

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


用GIMP查看data數(shù)據(jù)

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

mat的使用

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


選擇分析的內(nèi)容

至于本文第1張圖怎么打開的,那是在override標(biāo)簽下點(diǎn)擊:dominator tree出現(xiàn)的。如果你還有疑問(wèn),請(qǐng)?jiān)u論,我會(huì)回復(fù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容