安卓中与图相关的都是以bitmap存在的,我们经常会计算图片加载到应用中,所占内存的大小。
有个概念:一张图片所造物理内存,也就是我们直接在手机上或电脑上查看图片信息,里面有个大小,比如说3.4M,但是加载到安卓应用后,它实际所占应用内存并不一定是3.4M
bitmap中计算大小的方法有
- getRowBytes() 这个在 API Level 1添加的,返回的是bitmap一行所占的大小,需要乘以bitmap的高,才能得出btimap的大小
- getByteCount() 这个是在 API Level 12添加的,其实是对getRowBytes()乘以高的封装
- getAllocationByteCount() 这个是在 API Level 19添加的
官方推荐在API Level 19以上使用getAllocationByteCount() ,来获取bitmap的大小
为了方便使用以及解决兼容性问题,可以封装个方法
public static int getBitmapSize(Bitmap bitmap){
if (bitmap == null) {
return 0;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //api 19
return bitmap.getAllocationByteCount();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1){ //api 12
return bitmap.getByteCount();
}
return bitmap.getRowBytes() * bitmap.getHeight(); //other version
}