getByteCount()和getAllocationByteCount()的区别
主要是Bitmap的这两个方法得到的Bitmap的值,会在内存复用体现。
如果不使用内存复用,这两个方法是一样的效果。
bitmap内存.png
在通过复用 Bitmap 来解码图片时,那么 getByteCount() 表示新解码图片占用内存的大 小,getAllocationByteCount() 表示被复用 Bitmap真实占用的内存大小。
比如:上面的图片,黑色区域是当前Bitmap对象实际内存占用大小,但是这部分内存中,只有红色区域是新占用的,而其他的区域是可以复用的但是没被复用(即Bitmap中新的图片只是占用了8个大小,但是Bitmap实际大小其实是有20),那么如果使用getByteCount()就只会返回被复用区域的内存大小,所以使用getByteCount()返回内存区域的大小,其实是小于等于实际大小的。
以为你Bitmap占用内存大小,是由最大的图片来决定的,如果放入一张更小的图片,其实并不会减少Bitmap占用的内存大小。
可以认为:
getByteCount()只是图片的大小
getAllocationByteCount()是Bitmap的大小
因为Bitmap可以复用,所以Bitmap可以放入不同的图片,当Bitmap放入更大的图片的时候,就会占用更大的内存,但是这个时候如果对Bitmap对象进行复用,放入一张小图片,并不会改变Bitmap的大小。