我正在调整位图数组的大小。虽然当我调整(缩小)存储在数组中的位图时,数组加载正常(表示有足够的内存来容纳它),但是遇到OutOfMemory错误。这是导致堆耗尽的代码:
for (int i=0;i<2;i++) {
for (int j=0;j<427;j++) {
frameSet[i][j] = Bitmap.createScaledBitmap(frameSet[i][j],128,128,true);
}
}
为了解决这个问题,我创建了一个临时位图,并添加了一个recycle()调用:
for (int i=0;i<2;i++) {
for (int j=0;j<427;j++) {
tempFrameResize = Bitmap.createScaledBitmap(frameSet[i][j],128,128,true);
frameSet[i][j] = tempFrameResize;
tempFrameResize.recycle();
}
}
这会纠正OutOfMemory错误,但frameSet的内容不再正确(即它们看起来都是白色的,就好像位图的内容被清除一样)。我的回收调用(在tempFrameResize的内容被传递到frameSet之后调用)是否会影响frameSet的内容?这似乎正是发生的事情。
答案 0 :(得分:0)
将缩放后的位图指定给数组时,您不会复制该对象。你正在引用它。它就像任何其他对象实例一样。因此,您将循环使用缩放的位图本身和分配给该阵列的位图。这是同一个对象。 您没有遇到堆错误,因为您正在发布位图数组图像。