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

本文介绍了一种在Android中处理Bitmap回收的方法,并提供了一个自定义的ImageView类来避免使用已回收Bitmap时出现的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值