Bitmap到底加载到内存有多大?

android 手机屏幕密度等级和屏幕逻辑尺寸

  • 逻辑像素密度,是 rom 厂商设定的值,一般是取实际屏幕密度最接近的屏幕密度等级对应的值。
    getResources().getDisplayMetrics().densityDpi 可以获取到该值

一张图片到底占用的内存有多大?

private int sizeOf(Bitmap value) {
    return value.getRowBytes() * value.getHeight();
}

通过这个方法,我们就可以获取到一张 Bitmap 在运行时到底占用多大内存了。


给我一张图片,我来告诉你内存占用多大

//逻辑像素密度
int inTargetDensity = getResources().getDisplayMetrics().densityDpi;

int scaleWidth = (int) (500f * inTargetDensity / densityDpi + 0.5);
int scaleHeight = (int) (645f * inTargetDensity / densityDpi + 0.5);
int memory = scaleWidth * scaleHeight * 4;
  1. 其中 densityDpi 与 图片放入的文件夹有关,mdpi为160;hdpi为240;xhdpi为320;xxhdpi为480;xxxdpi为640.

总结

其实,通过前面的代码跟踪,我们就不难知道,Bitmap 在内存当中占用的大小其实取决于:

  • 色彩格式,前面我们已经提到,如果是 ARGB8888 那么就是一个像素4个字节,如果是 RGB565 那就是2个字节

  • 原始文件存放的资源目录(是 hdpi 还是 xxhdpi 可不能傻傻分不清楚哈)

  • 目标屏幕的密度(所以同等条件下,红米在资源方面消耗的内存肯定是要小于三星S6的)


参考资料

Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?

你可能感兴趣的:(Bitmap到底加载到内存有多大?)