Android Res圖片內(nèi)存占用的一個坑和處理方法

眾所周知... 平時咱們Android手機(jī)顯示圖片的時候,會自動根據(jù)當(dāng)前屏幕DPI(mdpi、hdpi 、xhdpi、xxhdpi )來匹配圖片,如果當(dāng)前DPI對應(yīng)的文件夾下沒有該圖片這會去臨近DPI下去查找。這就有可能會導(dǎo)致我們今天要講的主角,圖片占用內(nèi)存過大。

小伙伴可能會覺得開玩笑吧? 圖片大小不是天生定好了的嗎?
比如1000*1000像素的照片,默認(rèn)設(shè)置(ARGB_8888)全部加載入內(nèi)存則需要4m的內(nèi)存,這是理想情況下,那不理想是什么狀態(tài)呢?
比如手機(jī)分辨率是1080p 那么對應(yīng)的就是xxhdip,那么如果這個時候指定的圖片在mdpi,那么內(nèi)存占用會是怎樣的呢?(運(yùn)行設(shè)備分辨率 1080p)

PS:以下測試為了準(zhǔn)確性,只顯示了一張圖片且沒有其他任何操作(所有測試均采用同一張圖片)


mdpi.png

hdpi.png

xhdip.png

xxhdpi.png

相同的圖片,放在不同的文件夾下,所占內(nèi)存截然不同

例如xxdpi的設(shè)備 使用mdpi文件夾下的圖片,系統(tǒng)會自動將mdpi下的圖片長寬自動放大三倍,也就是說面積放大了9倍,導(dǎo)致的后果就是:內(nèi)存占用也是沒拉伸放大之前的9倍;
為什么是三倍呢? mdpi是160dpi,xhdpi是320dpi,xxdpi是480dpi。接下來的就很好理解了吧?

可是大家可能看上圖感覺...最大差距沒有9倍啊, 因?yàn)樽髡邔D片放在了mipmap中,而用mipmap系統(tǒng)會在縮放上提供一定的性能優(yōu)化。

為了證明這個觀點(diǎn)我們嘗試刪除了mipmap中的圖片,將圖片放置在drawable文件夾中


drawable.png

因?yàn)閳D片在drawable文件夾下是沒有縮放優(yōu)化的,放在drawable默認(rèn)就是mdpi,so...內(nèi)存占用大的驚人...

總結(jié):
1.需要的圖片盡可能的覆蓋多DPI,以達(dá)到較為良好的內(nèi)存占用;
2.如果提供的圖片尺寸有限,盡可能的有一套高DPI下的圖片,因?yàn)橄蛳率湛s所占的內(nèi)存遠(yuǎn)小于放大所占的內(nèi)存

有任何疑問與建議,歡迎大家留言或者Email:mox113@foxmail.com討論。_!

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

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

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