cannot access an invalid/free’d bitmap here!

文章讲述了在Android开发中遇到的一个错误日志,该日志指出由于在Dialog未关闭时回收了Bitmap导致应用崩溃。解决方案是在Dialog设置OnDismissListener,在Dialog消失时安全地回收Bitmap,以防止访问无效的数据库项。
摘要由CSDN通过智能技术生成

报错日志

2023-07-19 19:05:43.780 11493-11493/? A/DEBUG: Build fingerprint: 'rockchip/rk3326_go/rk3326_go:9/PQ2A.190305.002/root08251804:userdebug/test-keys'
2023-07-19 19:05:43.780 11493-11493/? A/DEBUG: Revision: '0'
2023-07-19 19:05:43.781 11493-11493/? A/DEBUG: ABI: 'arm'
2023-07-19 19:05:43.781 11493-11493/? A/DEBUG: pid: 11078, tid: 11078, name: .org.video_lock  >>> com.org.video_lock <<<
2023-07-19 19:05:43.781 11493-11493/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
2023-07-19 19:05:43.781 11493-11493/? A/DEBUG: Abort message: 'Error, cannot access an invalid/free'd bitmap here!'
2023-07-19 19:05:43.781 11493-11493/? A/DEBUG:     r0  00000000  r1  00002b46  r2  00000006  r3  00000008
2023-07-19 19:05:43.781 11493-11493/? A/DEBUG:     r4  00002b46  r5  00002b46  r6  ffd42644  r7  0000010c
2023-07-19 19:05:43.781 11493-11493/? A/DEBUG:     r8  e6d8b480  r9  00000000  r10 00000000  r11 ffd42b9c
2023-07-19 19:05:43.782 11493-11493/? A/DEBUG:     ip  ffd425e0  sp  ffd42630  lr  e8367e49  pc  e835fc96

之前看到这种崩溃日志的时候,我都要崩溃了,还好里面有关键信息,可以帮助排查cannot access an invalid/free’d bitmap here!


我出现这个问题的原因是bitmap 显示在dialog 上面,而在这个Dialog还未消失时,就调用 bitmap.recycle() 回收bitmap 造成的

所以 所以,一定确保bitmap不再使用,再去回收它
在以下情况下应该回收 bitmap:

  1. 当你确定不再需要 bitmap 时,比如在 Activity 或 Fragment 的 onDestroy() 方法中。
  2. 如果 bitmap 已经从 UI 中移除,不再显示在任何 UI 元素上。
  3. 当需要释放内存或减少资源占用时。

解决办法就是在Dialog 设置 setOnDismissListener 监听,消失的时候调用

  // 回收 bitmap
        if (bitmap != null) {
            bitmap.recycle();
            bitmap = null;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值