衆所周知... 平時咱們Android手機顯示圖檔的時候,會自動根據目前螢幕DPI(mdpi、hdpi 、xhdpi、xxhdpi )來比對圖檔,如果目前DPI對應的檔案夾下沒有該圖檔這會去臨近DPI下去查找。這就有可能會導緻我們今天要講的主角,圖檔占用記憶體過大。
小夥伴可能會覺得開玩笑吧? 圖檔大小不是天生定好了的嗎?
比如1000*1000像素的照片,預設設定(ARGB_8888)全部加載入記憶體則需要4m的記憶體,這是理想情況下,那不理想是什麼狀态呢?
比如手機分辨率是1080p 那麼對應的就是xxhdip,那麼如果這個時候指定的圖檔在mdpi,那麼記憶體占用會是怎樣的呢?(運作裝置分辨率 1080p)
PS:以下測試為了準确性,隻顯示了一張圖檔且沒有其他任何操作(所有測試均采用同一張圖檔)
mdpi.png
hdpi.png
xhdip.png
xxhdpi.png
相同的圖檔,放在不同的檔案夾下,所占記憶體截然不同
例如xxdpi的裝置 使用mdpi檔案夾下的圖檔,系統會自動将mdpi下的圖檔長寬自動放大三倍,也就是說面積放大了9倍,導緻的後果就是:記憶體占用也是沒拉伸放大之前的9倍;
為什麼是三倍呢? mdpi是160dpi,xhdpi是320dpi,xxdpi是480dpi。接下來的就很好了解了吧?
可是大家可能看上圖感覺...最大差距沒有9倍啊, 因為作者将圖檔放在了mipmap中,而用mipmap系統會在縮放上提供一定的性能優化。
為了證明這個觀點我們嘗試删除了mipmap中的圖檔,将圖檔放置在drawable檔案夾中
drawable.png
因為圖檔在drawable檔案夾下是沒有縮放優化的,放在drawable預設就是mdpi,so...記憶體占用大的驚人...
總結:
1.需要的圖檔盡可能的覆寫多DPI,以達到較為良好的記憶體占用;
2.如果提供的圖檔尺寸有限,盡可能的有一套高DPI下的圖檔,因為向下收縮所占的記憶體遠小于放大所占的記憶體