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(); 
    } 

你可能感兴趣的:(bitmap)