【问题标题】:Does recycling a bitmap affect other copies of it in memory?回收位图会影响内存中的其他副本吗?
【发布时间】:2015-06-02 06:55:50
【问题描述】:

我正在调整位图数组的大小。虽然当我调整(缩小)存储在数组中的位图大小时,数组加载正常(表明有足够的内存来保存它),但我遇到了 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 的内容?这似乎是正在发生的事情。

【问题讨论】:

    标签: java android bitmap resize recycle


    【解决方案1】:

    当您将缩放位图分配给数组时,您不会复制对象。您正在引用它。它就像任何其他对象实例一样。因此,您正在回收缩放位图本身以及分配给数组的位图。这是同一个对象。 您没有遇到堆错误,因为您正在释放位图数组图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2017-02-28
      相关资源
      最近更新 更多