在开发过程中,我们会需要加载很多的图片,必要的时候需要我们手动回收掉之前加载图片的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"); } } }