文件夹寄存和加载战略 图片分辨率 Bitmap内存占用提升的关键

图片内存占用计算公式

同一张图片,展如今不同分辨率手机上,内存占用大小分歧吗?

不分歧。由于inDensity的数值分歧,但targetDensity的数值不分歧,所以图片的缩放比例不同,占用内存人造不同.

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

分歧。只管不同分辨率下的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创立,所以还是每个文件夹下都放对应分辨率的图片是最好的。

您可能还会对下面的文章感兴趣: