一、不复用的情况
如果不使用内存复用,这两个方法是一样的效果。
二、复用的情况
在通过复用 Bitmap 来解码图片时,那么 getByteCount() 表示新解码图片占用内存的大 小,getAllocationByteCount() 表示被复用 Bitmap真实占用的内存大小。
可以认为:
getByteCount()只是图片的大小
getAllocationByteCount()是Bitmap的大小
因为Bitmap可以复用,所以Bitmap可以放入不同的图片,当Bitmap放入更大的图片的时候,就会占用更大的内存,但是这个时候如果对Bitmap对象进行复用,放入一张小图片,并不会改变Bitmap的大小。
举例说明:
比如,最初Bitmap放入一张大小为4M的图片,这个时候Bitmap占用了4M的内存,然后当这张图片使用完成之后,对Bitmap进行复用,放入一张1M的图片,这个时候其实只是复用了Bitmap之前内存大小的四分之一,如果使用getByteCount(),得到的其实就是1M,但是这个时候Bitmap对象实际占用内存其实还是4M,虽然对Bitmap进行了复用,但是并不会因为放入的图片变小了而改变了原本Bitmap对象占用内存的大小,所以getAllocationByteCount()返回的是4M