QQ截图20180426154121.png
想要知道一个Bitmap 占用多大内存 我们只需要调用getByteCount方法就可以了,但是不可能每次都将图片塞到项目中然后把运行看吧,所以我们必须要学会占卜的技能,精准计算它放进来所占内存来考虑是否放它.
我们测试手机华为mate8 分辨率 1080* 1920,densityDpi 480
测试图片720*1280 放置在xhdpi中
首先必须明白下面的尺寸对应关系
屏幕DPI的对应关系
density
1
1.5
2
3
3.5
4
densityDpi
160
240
320
480
560
640
资源文件夹DPI中对应关系
Android手机屏幕标准
对应图标尺寸标准
屏幕密度
比例
xxxhdpi 3840*2160
192*192
640
16
xxhdpi 1920*1080
144*144
480
12
xhdpi 1280*720
96*96
320
8
hdpi 480*800
72*72
240
6
mdpi 480*320
48*48
160
4
ldpi 320*240
36*36
120
3
https://blog.csdn.net/u010652002/article/details/72676723
源码追踪我们参考上面博客
通道透明ARGB_8888(也就是我们最常用的 Bitmap 的格式)的一个像素占用 4byte,那么 rowBytes 实际上就是 4*width bytes。
屏幕densityDpi(480)
xhdpiDpi (320)
bitmapWidth * densityDpi / xhdpiDpi
bitmapHeight * densityDpi / xhdpiDp
4
= 8294400B 差不多7.9M左右
总内存: 8294400
view width: 1080
view height: 1572
bitmap width: 1080
bitmap height:1080
density: 3.0
dpi: 480
scaledWidth = int( 720* 480/ 320f + 0.5) = 1080
scaledHeight = int( 1280* 480 / 320f + 0.5) = 1920