首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Bitmap recycle() 導致異常的原因與解決方案

     編輯:程式設計綜合問答

異常現象

調用 Bitmap.recycle() 後,隨後操作同一 Bitmap 的 View 繪製時拋出異常:Canvas: trying to use a recycled bitmap。

原因分析

代碼中 mView.change(Bitmap.createBitmap(bm,...)) 其實創建了新 Bitmap,但隨後對原 bm 調用 recycle()。若 mView 內部仍持有對原 bm 的引用(或未正確釋放),回收導致內存失效,繪製時崩潰。

正確做法

  • 僅在確定 無任何對象引用該 Bitmap 時調用 recycle()。
  • 使用 inBitmap 復用內存(API 19+),避免頻繁 GC。
  • 若需立即釋放,先將 View 的圖片設置為 null 或其他占位圖,再回收。
// 正確順序示例
if (bm != null && !bm.isRecycled()) {
    mView.setImageBitmap(null); // 斷開引用
    bm.recycle();
    bm = null;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved