现在做了一个图片上传功能,总是会提示内存溢出,刚刚开始一两张图片还是挺好,但是等用户慢慢的提交完成,然后后面又拍照打算传的时候,就会报出内存溢出,我就很纳闷,为什么之前已经上传完毕的图片所占用的内存,系统不会将它们回收的吗?顺带附上一段代码,这样帮忙看看,是否写法跟内存占用大有关系??附一段代码:
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;
}
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;
}
解决方案 »
- 兄弟们,我又有问题向大家请教了
- html显示本地数据库中图片
- 让自定义View中的onDraw方法不重复执行
- 如何指定安卓虚拟机新建avd的位置?
- android资源中hdpi mdpi ldpi存图片的问题
- 在Eclipse中启动Android程序过慢
- handleMessage里面更新ListView内容
- sendTextMessage无法运行
- 为什么Fragment中的按钮写在onActivityCreated中依旧无效?
- ListView onItemClick 事件与Item 的滑动事件冲突,该如何处理?
- 数据通过webservice连接后,怎么解析或得的数据(soapObject解析)
- SearchView问题
用软引用还有,中间临时的bitmap也会占用大量内存,尽量不要生成临时的bitmap,使用流,到最后再生成出bitmap。
系统有几个方法是会产生bitmap临时变量的,比如createBitmap,尽量避免。
BitmapFactory.decodeStream???是这样吗?抱歉,我接触android不是很久,菜鸟一枚
BitmapFactory.decodeStream???是这样吗?抱歉,我接触android不是很久,菜鸟一枚
BitmapFactory.decodeStream转成流来处理,占用的内存要小一半
mBitmap1 = getSmallBitmap(image_path);
在通过新的imagePath获取Bitmap前,是否可以将这个mBitmap1内存回收下呢