android释放res内存,Android Res图片内存占用的一个坑和处理方法

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

小伙伴可能会觉得开玩笑吧? 图片大小不是天生定好了的吗?

比如1000*1000像素的照片,默认设置(ARGB_8888)全部加载入内存则需要4m的内存,这是理想情况下,那不理想是什么状态呢?

比如手机分辨率是1080p 那么对应的就是xxhdip,那么如果这个时候指定的图片在mdpi,那么内存占用会是怎样的呢?(运行设备分辨率 1080p)

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

b48adef1b28f?mType=Group

mdpi.png

b48adef1b28f?mType=Group

hdpi.png

b48adef1b28f?mType=Group

xhdip.png

b48adef1b28f?mType=Group

xxhdpi.png

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

例如xxdpi的设备 使用mdpi文件夹下的图片,系统会自动将mdpi下的图片长宽自动放大三倍,也就是说面积放大了9倍,导致的后果就是:内存占用也是没拉伸放大之前的9倍;

为什么是三倍呢? mdpi是160dpi,xhdpi是320dpi,xxdpi是480dpi。接下来的就很好理解了吧?

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

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

b48adef1b28f?mType=Group

drawable.png

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

总结:

1.需要的图片尽可能的覆盖多DPI,以达到较为良好的内存占用;

2.如果提供的图片尺寸有限,尽可能的有一套高DPI下的图片,因为向下收缩所占的内存远小于放大所占的内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值