我已经回收了位图变量,当我再次尝试使用相同的变量时,我在参考回收时遇到了一些奇怪的错误。该问题的任何解决方案?
image1.recycle(); 图像1 = NULL;
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)
答案 0 :(得分:0)
您可以在回收位图之前进行检查,如:
if (img != null && !img.isRecycled())
{
img.recycle();
img = null;
System.gc();
}
这里的img是位图。
尝试此类错误已解决。
答案 1 :(得分:0)
从源位图的指定子集返回不可变位图。新位图可以是与源相同的对象,也可以是副本。
似乎createBitmap函数有可能重用您提供的位图。如果是这种情况,那么您不应该回收临时位图,因为您的最终位图正在使用它。你可以做的一件事是
if(tempBitmap != finalBitmap) {
tempBitmap.recycle();
}
只有当它与finalBitmap不同时才应该回收tempBitmap。至少这似乎是文档所暗示的内容。
答案 2 :(得分:0)
回收位图后,其内存将被释放。这意味着位图数据从内存中消失了。如果你想再次使用相同的变量,你必须解码Bitmap againg。
if (image1 == null || image1.isRecycled()) {
image1 = BitmapFactory.decodeStream()
}