java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230

本文探讨了在Android开发中,由于过早回收Bitmap可能导致的`java.lang.RuntimeException: Canvas: trying to use a recycled bitmap`错误。问题出现在Bitmap仍在使用时被回收,解决方案是确保在View被移除后再进行回收。另外,当使用Bitmap.createScaledBitmap()且参数相同,直接回收源Bitmap会连带影响其子集,需谨慎处理。

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

Android 中Bitmap相关会涉及到很多问题,如果没有及时释放bitmap,就会造成内存泄漏。经过一段时间的浸淫,对Android也越来越熟悉,对于内存泄漏的问题也会越来越关注。但是出乎意料的是,在一次项目中出现了因为太及时的释放了bitmap导致RuntimeException。


出现了这种问题,当然是stackoverflow走起了,经过艰辛的英语模糊理解后,针对自己的代码终于大致知道了问题所在了。

我们在用Bitmap渲染到ImageView等View中的时,如果在该View未回收,还处于window中,这个时候我们对该bitmap进行recycle(),那么恭喜你,就会出现:

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230

此时解决的办法也很简单,就是将该View设置渲染为NULL,再去回收bitmap。

eg:

    Bitmap scaleBitmap = BitmapFactory.decodeFile(path.replaceAll("%25", "%"), options);
    imageView.setImageBitmap(scaleBitmap);     //scaleBitmap 渲染到imageView
    .....
    .....
    if (scaleBitmap != null && !scaleBitmap.isRecycled()) {
        image
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值