最近在做一个项目,需要用到listview显示用户列表。每个item由iamgeview和两个textview组成。Imageview是使用setImageBitmap()去设置图片的。
在使用Bitmap的时候,我们需要特别注意内存上的优化。有以下几个点需要大家注意:
1.如果知道bitmap什么时候不需要使用到,应及时将其释放掉。
if(!mBitmap.isRecycle()){
mBitmap.Recycle();
mBitmap = null;
}
2.当图片源大小大于要显示的尺寸大小,在创建时应将其进行压缩。
BitmapFactory.Options op = new BitmapFactory.Options();
op.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeFile(path, op); //获取尺寸信息
//获取比例大小
int wRatio = (int)Math.ceil(op.outWidth/DISPLAY_WIDTH);
int hRatio = (int)Math.ceil(op.outHeight/DISPLAY_HEIGHT);
//如果超出指定大小,则缩小相应的比例
if(wRatio > 1 && hRatio > 1){
if(wRatio > hRatio){
op.inSampleSize = wRatio;
}else{
op.inSampleSize = hRatio;
}
}
op.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeFile(path, op);
这样一来,假设原本图片大小为2M,而你只需要50px*50px,那你可以省下大笔内存!