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

本文有大招,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ù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容