当前位置:   article > 正文

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

anroid setbackgroundres 资源释放

众所周知... 平时咱们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下的图片,因为向下收缩所占的内存远小于放大所占的内存

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/303674
推荐阅读
相关标签
  

闽ICP备14008679号