赞
踩
众所周知... 平时咱们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下的图片,因为向下收缩所占的内存远小于放大所占的内存
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。