眾所周知... 平時咱們Android手機顯示圖片的時候,會自動根據當前屏幕DPI(mdpi、hdpi 、xhdpi、xxhdpi )來匹配圖片,如果當前DPI對應的文件夾下沒有該圖片這會去臨近DPI下去查找。這就有可能會導致我們今天要講的主角,圖片占用內存過大。
小伙伴可能會覺得開玩笑吧? 圖片大小不是天生定好了的嗎?
比如1000*1000像素的照片,默認設置(ARGB_8888)全部加載入內存則需要4m的內存,這是理想情況下,那不理想是什么狀態呢?
比如手機分辨率是1080p 那么對應的就是xxhdip,那么如果這個時候指定的圖片在mdpi,那么內存占用會是怎樣的呢?(運行設備分辨率 1080p)
PS:以下測試為了準確性,只顯示了一張圖片且沒有其他任何操作(所有測試均采用同一張圖片)
相同的圖片,放在不同的文件夾下,所占內存截然不同
例如xxdpi的設備 使用mdpi文件夾下的圖片,系統會自動將mdpi下的圖片長寬自動放大三倍,也就是說面積放大了9倍,導致的后果就是:內存占用也是沒拉伸放大之前的9倍;
為什么是三倍呢? mdpi是160dpi,xhdpi是320dpi,xxdpi是480dpi。接下來的就很好理解了吧?
可是大家可能看上圖感覺...最大差距沒有9倍啊, 因為作者將圖片放在了mipmap中,而用mipmap系統會在縮放上提供一定的性能優化。
為了證明這個觀點我們嘗試刪除了mipmap中的圖片,將圖片放置在drawable文件夾中
因為圖片在drawable文件夾下是沒有縮放優化的,放在drawable默認就是mdpi,so...內存占用大的驚人...
總結:
1.需要的圖片盡可能的覆蓋多DPI,以達到較為良好的內存占用;
2.如果提供的圖片尺寸有限,盡可能的有一套高DPI下的圖片,因為向下收縮所占的內存遠小于放大所占的內存
有任何疑問與建議,歡迎大家留言或者Email:mox113@foxmail.com討論。_!