Bitmap的getAllocationByteCount和getByteCount区别

1,997 阅读2分钟

1,在Bitmap没有复用的情况下,如图:

bitmap没有复用

  • 在这种情况下,使用bitmap.getByteCount(),得到的内存大小是这一整块的大小。

2,在安卓4.4版本及以上版本,同时在复用的情况下。如图:

bitmap在安卓4.4及以上复用

  • 在这种情况下,使用bitmap.getByteCount(),得到的内存大小是“新的Bitmap占用的内存区域”,而“剩下的内存区域”是没有使用到的。
  • 使用bitmap.getAllocationByteCount(),得到的内存大小是黑色框的区域,也就是“新的Bitmap占用的内存区域”+“剩下的内存区域”的总和。
  • 虽然复用的图片只使用了一部分内存,也就是“新的Bitmap占用的内存区域”,但是它所占用的内存其实还是黑色框的区域。
  • 因为Android 4.4及以上只需要被复用的Bitmap的内存必须大于等于需要新获得Bitmap的内存,则允许复用此Bitmap。

3,在安卓4.4版本以下版本,同时在复用的情况下。如图:

bitmap在4.4以下复用

  • 在这种情况下,使用bitmap.getByteCount(),获得的内存大小,是黑色边框一整块的区域。
  • 4.4以下(3.0以上)则被复用的Bitmap与使用复用的Bitmap必须宽、高相等并且使用复用的Bitmap解码时设置的inSampleSize为1,才允许复用。

4,在未使用复用的情况下,每张图片都需要一块内存。而使用复用的时候,如果存在能被复用的图片会重复使用该图片的内存。所以复用并不能减少程序正在使用的内存大小。Bitmap复用,解决的是减少频繁申请内存带来的性能(抖动、碎片)问题。

5,Bitmap所占用的内存大小跟分辨率,尺寸宽高,图片格式有关。

6,第一次写文章笔记,写的不好之处,有错误之处,请多多指教。