cannot access an invalid/free’d bitmap here!

报错日志

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;
        }

你可能感兴趣的:(安卓,异常崩溃,android)