读书人

Bitmap以致的OOM 终极解决方案

发布时间: 2012-08-07 14:54:48 作者: rapoo

Bitmap导致的OOM 终极解决方案
1 bitmap如果不用了,回收掉

protected void onDestroy() {
super.onDestroy();
if(bmp1 != null){
bmp1.recycle();
bmp1 = null;
}
if(bmp2 != null){
bmp2.recycle();
bmp2 = null;
}
}

2 先算出该bitmap的大小,然后通过调节采样率的方式来规避

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imageFile, opts);
opts.inSampleSize = computeSampleSize(opts, minSideLength, maxNumOfPixels);
opts.inJustDecodeBounds = false;
try {
return BitmapFactory.decodeFile(imageFile, opts);
} catch (OutOfMemoryError err) {
}
return null;

3 在进行文件传输时,最好采用压缩的方式变成byte[]再传输

public static byte[] bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 90, baos);
return baos.toByteArray();
}

读书人网 >移动开发

热点推荐