回收后重用位图变量

时间:2013-05-29 06:17:47

标签: android android-imageview

我已经回收了位图变量,当我再次尝试使用相同的变量时,我在参考回收时遇到了一些奇怪的错误。该问题的任何解决方案?

java代码:

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

logcat的:

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)

3 个答案:

答案 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()
}