3 回答

TA貢獻2065條經驗 獲得超14個贊
嘗試改變你的onDestroy方法如下
@Override
protected void onDestroy() {
? ? for(Map.Entry<Integer, ImageView> entry : mapImageViews.entrySet()) {
? ? ? ? ImageView imageView = entry.getValue();
? ? ? ? Drawable drawable = imageView.getDrawable();
? ? ? ? if (drawable instanceof BitmapDrawable) {
? ? ? ? ? ? BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
? ? ? ? ? ? Bitmap bitmap = bitmapDrawable.getBitmap();
? ? ? ? ? ? if(bitmap != null) {
? ? ? ? ? ? ? ? bitmap.recycle();
? ? ? ? ? ? }
? ? ? ? ? ? bitmapDrawable = null;
? ? ? ? ? ? bitmap = null;
? ? ? ? }
? ? ? ? imageView.setOnClickListener(null);
? ? ? ? imageView.setImageDrawable(null);
? ? ? ? imageView.setImageBitmap(null);
? ? ? ? imageView = null;
? ? ? ? drawable = null;
? ? }
? ? mapImageViews.clear();
? ? mapImageViews = null;
? ? super.onDestroy();
}

TA貢獻1810條經驗 獲得超5個贊
根據回收文件
位圖被標記為“死”,這意味著如果調用 getPixels() 或 setPixels() 它將拋出異常,并且不會繪制任何內容。此操作無法逆轉,因此僅當您確定該位圖不再使用時才應調用它。
我看不到你如何將 your 分配bitmaps
給 your?ImageView
,但我假設當你在位圖被使用后再次啟動意圖時,你正在嘗試重用位圖recycled
。我只在使用時遇到異常android:src=
。如果我ImageView
使用以下內容設置位圖oncreate
,它在您列出的所有目標上運行良好,不會引發異常。
imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(),?R.drawable.lake_park));

TA貢獻1735條經驗 獲得超5個贊
實際上我認為你不必手動執行此操作。
如果 Activity2 只有 1 個圖像并且已經調整大小,我認為如果您確實面臨內存問題,回收不會有太大幫助。
并且根據該文檔,僅建議API級別低于10的用戶使用recycle(),并且用戶的比例很小。?On Android 2.3.3 (API level 10) and lower, using recycle() is recommended.
?
我想推薦使用第三方圖像庫,因為它們可以讓您免于做這些無意義的事情,讓您專注于應用程序更重要的部分。
添加回答
舉報