Android模拟器:java.lang.OutOfMemoryError当操纵位图
问题描述:
我有一个例程,操纵一个位图将表单RGB转换为灰度。Android模拟器:java.lang.OutOfMemoryError当操纵位图
它工作正常,通常情况下,但是当我尝试使用它在一个位图是1088kb大小它给了我这个错误:
java.lang.OutOfMemoryError
我使用的模拟器。 1088kb不是一个很大的图片,它怎么会耗尽内存?
确切地说,确实调用有问题的代码的应用程序包括具有图片缩略图ListView的后备栈上的另一个Activity。
这是方法:
public Bitmap toGrayscale(Bitmap bmpOriginal)
{
int width, height;
height = bmpOriginal.getHeight();
width = bmpOriginal.getWidth();
Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bmpOriginal, 0, 0, paint);
return bmpGrayscale;
}
答
您现在的位置在内存管理的位图非常低效的,你可能有内存泄漏(当你与他们做了不释放从内存位图或留存记录,不收集垃圾的活动)。 Android开发者有适当的区域管理页面:
http://developer.android.com/training/displaying-bitmaps/index.html
您可以尝试在你的模拟器增加堆大小。
Out of memory error on android emulator, but not on device
监控您模拟器堆大小:
https://*.com/a/7427803/445131
摆脱你的内存泄漏:
What Android tools and methods work best to find memory/resource leaks?
位图大小是1088 kB或PNG文件? – Selvin 2013-02-14 15:07:16
你需要.recycle()位图,当你没有使用它,也许你可以回收“原件”,并保持灰度在内存 – PaNaVTEC 2013-02-14 15:13:41
@PaNaVTEC请问我该怎么做?只需在位图上调用recycle()即可?谢谢!!!! – 2013-02-14 15:22:02