Gallery 適配器中多次調用 GetBMP() 獲取 Bitmap,但顯示的圖片全相同;嘗試 bitmap.recycle() 釋放內存卻導致 App 閃退。
GetBMP() 每次返回同一 contentLayout 的繪圖緩存 getDrawingCache(),未創建獨立副本。ImageView,觸發 Canvas: trying to use a recycled bitmap 崩潰。// 1. 為每個項目創建獨立 Bitmap 副本
public Bitmap GetBMP(int position) {
// 根據 position 加載對應資源/網絡圖片
return BitmapFactory.decodeResource(getResources(), resIds[position]);
}
// 2. 適配器中持有 Bitmap 列表或使用圖片加載庫
// 推薦:Glide/Picasso 自動管理生命週期,無需手動 recycle
Glide.with(context).load(urls[position]).into(imageView);
Gallery(API 16 棄用),改用 RecyclerView + LinearLayoutManager.HORIZONTAL。diskCacheStrategy、override 尺寸,彻底避免 OOM 與 recycle 崩潰。LruCache 緩存 Bitmap,onDestroy 統一清理。