0

我已经回收了位图变量,当我再次尝试使用相同的变量时,我遇到了一些关于回收的奇怪错误。这个问题有什么解决办法吗?

爪哇代码:

image1.recycle(); 图像1=空;

日志猫:

05-29 11:35:42.139: E/AndroidRuntime(695): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@2bbad018
05-29 11:35:42.139: E/AndroidRuntime(695):  at android.graphics.Canvas.throwIfRecycled(Canvas.java:1038)
05-29 11:35:42.139: E/AndroidRuntime(695):  at android.graphics.Canvas.drawBitmap(Canvas.java:1078)
4

3 回答 3

0

一旦你回收位图,它的内存就会被释放。这意味着位图数据从内存中消失了。如果你想再次使用相同的变量,你必须再次解码 Bitmap。

if (image1 == null || image1.isRecycled()) {
    image1 = BitmapFactory.decodeStream()
}
于 2013-05-29T07:30:42.380 回答
0

从源位图的指定子集中返回不可变位图。新位图可能是与源相同的对象,或者可能已经制作了副本。

似乎 createBitmap 函数有可能重新使用您提供的位图。如果是这种情况,那么您不应该回收临时位图,因为您的最终位图正在使用它。你可以做的一件事是

if(tempBitmap != finalBitmap) {
   tempBitmap.recycle();
}

那应该只在它与 finalBitmap 不同时回收 tempBitmap。至少这似乎是文档所暗示的。

于 2013-05-29T06:21:51.583 回答
-1

您可以在回收位图之前进行检查,例如:

if (img != null && !img.isRecycled()) 
            {
                img.recycle();
                img = null;
                System.gc(); 
            }

这里的img是位图。

尝试这种类型的错误已解决。

于 2013-05-29T06:21:14.077 回答