现在做了一个图片上传功能,总是会提示内存溢出,刚刚开始一两张图片还是挺好,但是等用户慢慢的提交完成,然后后面又拍照打算传的时候,就会报出内存溢出,我就很纳闷,为什么之前已经上传完毕的图片所占用的内存,系统不会将它们回收的吗?顺带附上一段代码,这样帮忙看看,是否写法跟内存占用大有关系??附一段代码:
mBitmap1 = getSmallBitmap(image_path);  //options.inSampleSize  设置缩放之类的。
if(mBitmap1!=null)
mBitmap1=circle(mBitmap1);   //方法见红字
//创建画布
mCanvas = new Canvas(mBitmap1);
//创建画笔路径
mPath = new Path();
//创建画笔
mBitmapPaint = new Paint(Paint.DITHER_FLAG); Bitmap circle(Bitmap bmp) {
if(bmp==null)return null;
int bmpWidth = bmp.getWidth();
int bmpHeight = bmp.getHeight();
float width  = (float)Common.screenWidth/bmpWidth;
        float height = (float)Common.screenHeight/bmpHeight;
        Matrix matrix = new Matrix();
        matrix.postScale(width,height);
        
        Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight, matrix, true);
        if(!bmp.isRecycled()){
         bmp.recycle();
         bmp=null;
System.gc();
}
        return resizeBmp;
}

解决方案 »

  1.   

    大哥,你new了那么多咋没看见回收呢
      

  2.   

    mBitmap1 这个你上传完了 是否也应该回收呢?
      

  3.   

    mBitmap1=circle(mBitmap1);   //方法见红字 这个函数最终还是会生成一个bitmap 用完就回收 和你这个函数里面 一样
      

  4.   

    是这样的 recycle 调用这个函数 只是告诉 系统  这块内存我不用了,至于回收 那个不是你能负责的了,你只是通知,并且你再申请内存的时候这块可以被清理的,应该不矛盾
      

  5.   

    全部是强引用,不溢出才怪。
    用软引用还有,中间临时的bitmap也会占用大量内存,尽量不要生成临时的bitmap,使用流,到最后再生成出bitmap。
    系统有几个方法是会产生bitmap临时变量的,比如createBitmap,尽量避免。
      

  6.   


    BitmapFactory.decodeStream???是这样吗?抱歉,我接触android不是很久,菜鸟一枚
      

  7.   

    楼上的意思貌似是那个 WeakReference 这个 我只能帮你到这了http://www.2cto.com/kf/201207/139522.html
      

  8.   


    BitmapFactory.decodeStream???是这样吗?抱歉,我接触android不是很久,菜鸟一枚
    BitmapFactory.decodeStream转成流来处理,占用的内存要小一半
    mBitmap1 = getSmallBitmap(image_path); 
    在通过新的imagePath获取Bitmap前,是否可以将这个mBitmap1内存回收下呢