最近,我声明了一个函数,并将函数放在for
循环中,如下所示:
Bitmap image = ...//Do stuff to get image's bitmap, it's quite ok
for(int i =0; i < someNumber; i++){
image = doSomeThing(image, width, height);
}
private Bitmap doSomeThing(image, width, height){
int[] a = new int[10000];
Bitmap bitmap = image.copy(sentBitmap.getConfig(), true);
// Do some stuff here to process image
...
return (bitmap);
}
for
循环参数someNumber
小于5,我的应用程序非常好,否则,我将outOfMemory
。所以我想要一个建议来解决这个问题exception
!我可以使用System.gc()
吗?或者,我可以在for
的每个循环后执行某些操作来删除未启用的内存吗?
编辑:对不起,也许我省略了太多,我更新了我的代码!
Edited2 :如果不是for
循环,我会多次使用image = doSomething(...)
来电话,exception
不再是!!
谢谢!
答案 0 :(得分:1)
您可能需要在for循环中使用image.recycle()
时调用它。
编辑:啊,我看到你正在尝试做什么,将多个过滤器应用于同一图像。试试这个:
Bitmap image = ...;
for(int i =0; i < someNumber; i++){
Bitmap newImage = doSomeThing(image, width, height);
image.recycle();
image = newImage;
}
答案 1 :(得分:0)
在Java
立场上,System.gc()
可能没有任何效果,因为当内存不足时,如果可以,Java将清除它。
您的doSomeThing()
电话可能会为您拥有的内存量创建太多对象。
要么增加它,要么因为内存占用限制而不能,请调整Eden
空间。