Android回收图片的bitmap,导致的Canvas: trying to use a recycled bitmap异常处理

来源:互联网 发布:网络短剧排名 编辑:程序博客网 时间:2024/05/19 13:18

在开发过程中,我们会需要加载很多的图片,必要的时候需要我们手动回收掉之前加载图片的bitmap,一般都是通过调recycle()方法,然后在让bitmap为null,做到图片的回收。类似于这样:

if(bitmap != null && ! bitmap()){     bitmap.recycle(); //此句造成的以上异常     bitmap = null;  } 

这样就会爆出上面说的那个异常,有很多人认为应该把recycle()去掉,但去掉后又会引起内存的增长,虽然将bitmap置为null,但系统并没有真正的回收仍然占有内存,即是调用了System.gc() 强制回后以后,内存仍然没有下去,但加上bitmap.recycle() ,又会引起 Canvas: trying to use a recycled bitmap 异常。解决方法就是捕获异常,然后抛出,即自定义imageview,在onDraw()方法里添加一个异常捕获,即可捕捉到上面的错误。

import android.content.Context;  import android.graphics.Canvas;  import android.util.AttributeSet;  import android.widget.ImageView;  /**  * 重写ImageView,避免引用已回收的bitmap异常  *   * @author zwn  *   */  public class MyImageView extends ImageView {  public MyImageView (Context context, AttributeSet attrs) {      super(context, attrs);  }  @Override  protected void onDraw(Canvas canvas) {      try {          super.onDraw(canvas);      } catch (Exception e) {          System.out                  .println("MyImageView  -> onDraw() Canvas: trying to use a recycled bitmap");      }    }  }  
阅读全文
0 0