文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Bitmap内存占用优化的关键:图片分辨率、文件夹存放和加载策略

2024-11-29 23:38

关注

同一手机设备加载不同分辨率文件夹下的同一图片,内存占用大小一致吗?

一致。虽然不同分辨率下的inDensity数值是不同的,但只要设计师是按照规范切的图,那么不同分辨率图片之间的宽高缩放比例=inDensity之间的比例。 所以最终不同分辨率的图片在同一设备上展示时,图片宽高缩放后得到的最终值是一致的,内存也就一致了。

ImageView控件的大小会影响内存占用大小吗?

不会。因为通过src属性,我们在获取对应的drawable时,设置的density为0,density为0的情况下,图片的宽高是不会进行任何的缩放的,故而占用内存大小也不会有任何的改变。 内存占用大小=图片原始宽*图片原始高*色深

同一个资源id,通过BitmapFactory创建的bitmap和xml文件中ImageView设置的src,占用内存是否一致?

会有不一致的场景。如果inDensity和targetDensity不一致,那么通过BitmapFactory创建的bitmap会进行缩放,从而导致内存大小!=图片原始宽*图片原始高*色深。而xml通过src属性设置的图片,因为density=0的原因,图片不会进行任何的缩放,内存占用大小=图片原始宽*图片原始高*色深

三方图片加载框架设置图片大小,是否会影响图片占用内存?

会。三方框架设置图片大小的操作本质,是修改图片的宽高,图片的宽高变了,占用内存大小自然也就变了

Android图片适配的规则

先找手机设备dpi对应的drawable文件夹,如果当前文件夹找不到,策略是优先图片缩小。 所以会接着去找高分辨率下文件夹有没有这张图片,高分辨率都没有的情况下,会接着从低分辨文件夹中查找.

比如:手机设备dpi为320(xhdpi),如果在drawable-xhdpi文件中找不到对应图片,则接着去drawable-xxhdpi、drawable-xxxhdpi文件夹中查找,如果依然没有找到,则去drawable-hdpi、drawable-mdpi下查找。

为什么建议图片要放在正确的分辨率文件夹下?

只针对手机设备的分辨率是xxhdpi做分析,其余分辨率自行思考,targetDensity=480

分辨率是xxhdpi的图片,放在正确的drawable-xxhdpi文件夹下。 inDensity=480,targetDensity=480,图片缩放比例 scale=1

分辨率是xxhdpi的图片,放在错误的drawable-xhdpi文件夹下。 inDensity=320,targetDensity=480,图片缩放比例scale=1.5

内存大小从width*height*pointMemeory变成了(width*1.5+0.5)*(height*1.5+0.5)*pointMemory,导致占用的内存增加了许多。

一个dpi为320的手机设备,加载一张drawable-xxxhdpi下的图片,占用的内存和加载一张drawable-xhdpi下的图片一样吗?

当然一样,加载高分辨率图片时,图片是会缩小的,图片大小会缩放到和其他分辨率一致,故而占用内存大小是一致的

既然我们手机加载不同分辨率目录下的同一图片,占用内存大小都是一致的,那为什么还要创建多个drawable目录呢?直接使用drawable-xxxhdpi,岂不是还可以缩小包体积?

这里涉及到一个问题,就是xml文件中我们使用ImageView控件,直接通过src属性引用图片资源的场景。

而通过xml文件引用图片资源,占用的内存大小如下: 因为通过src属性,我们在获取对应的drawable时,设置的density为0,density为0的情况下,图片的宽高是不会进行任何的缩放的,故而占用内存大小也不会有任何的改变。内存占用大小=图片原始宽*图片原始高*色深

所以如果我是320的手机,我加载xhdpi下的图片,假设图片是18*12 argb8888,那内存占用就是18*12*4,但如果我只在xxxhdpi下有图片,假设图片是36*24,那内存占用就是36*24*4,内存占用一下就翻了4倍。而我们drawable目录下的图片,几乎都是用于xml引用图片,很少会用bitmapFactory创建,所以还是每个文件夹下都放对应分辨率的图片是最好的。

来源:沐雨花飞蝶内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯