Android Res图片内存占用的一个坑和处理方法

众所周知... 平时咱们Android手机显示图片的时候,会自动根据当前屏幕DPI(mdpi、hdpi 、xhdpi、xxhdpi )来匹配图片,如果当前DPI对应的文件夹下没有该图片这会去临近DPI下去查找。这就有可能会导致我们今天要讲的主角,图片占用内存过大。

小伙伴可能会觉得开玩笑吧? 图片大小不是天生定好了的吗?
比如1000*1000像素的照片,默认设置(ARGB_8888)全部加载入内存则需要4m的内存,这是理想情况下,那不理想是什么状态呢?
比如手机分辨率是1080p 那么对应的就是xxhdip,那么如果这个时候指定的图片在mdpi,那么内存占用会是怎样的呢?(运行设备分辨率 1080p)

PS:以下测试为了准确性,只显示了一张图片且没有其他任何操作(所有测试均采用同一张图片)


Android Res图片内存占用的一个坑和处理方法_第1张图片
mdpi.png

Android Res图片内存占用的一个坑和处理方法_第2张图片
hdpi.png

Android Res图片内存占用的一个坑和处理方法_第3张图片
xhdip.png

Android Res图片内存占用的一个坑和处理方法_第4张图片
xxhdpi.png

相同的图片,放在不同的文件夹下,所占内存截然不同

例如xxdpi的设备 使用mdpi文件夹下的图片,系统会自动将mdpi下的图片长宽自动放大三倍,也就是说面积放大了9倍,导致的后果就是:内存占用也是没拉伸放大之前的9倍;
为什么是三倍呢? mdpi是160dpi,xhdpi是320dpi,xxdpi是480dpi。接下来的就很好理解了吧?

可是大家可能看上图感觉...最大差距没有9倍啊, 因为作者将图片放在了mipmap中,而用mipmap系统会在缩放上提供一定的性能优化。

为了证明这个观点我们尝试删除了mipmap中的图片,将图片放置在drawable文件夹中


Android Res图片内存占用的一个坑和处理方法_第5张图片
drawable.png

因为图片在drawable文件夹下是没有缩放优化的,放在drawable默认就是mdpi,so...内存占用大的惊人...

总结:
1.需要的图片尽可能的覆盖多DPI,以达到较为良好的内存占用;
2.如果提供的图片尺寸有限,尽可能的有一套高DPI下的图片,因为向下收缩所占的内存远小于放大所占的内存

有任何疑问与建议,欢迎大家留言或者Email:[email protected]讨论。_!

你可能感兴趣的:(Android Res图片内存占用的一个坑和处理方法)