安卓中與圖相關的都是以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
}