3 回答

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
嘗試改變你的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貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
根據(jù)回收文件
位圖被標(biāo)記為“死”,這意味著如果調(diào)用 getPixels() 或 setPixels() 它將拋出異常,并且不會(huì)繪制任何內(nèi)容。此操作無(wú)法逆轉(zhuǎn),因此僅當(dāng)您確定該位圖不再使用時(shí)才應(yīng)調(diào)用它。
我看不到你如何將 your 分配bitmaps
給 your?ImageView
,但我假設(shè)當(dāng)你在位圖被使用后再次啟動(dòng)意圖時(shí),你正在嘗試重用位圖recycled
。我只在使用時(shí)遇到異常android:src=
。如果我ImageView
使用以下內(nèi)容設(shè)置位圖oncreate
,它在您列出的所有目標(biāo)上運(yùn)行良好,不會(huì)引發(fā)異常。
imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(),?R.drawable.lake_park));

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
實(shí)際上我認(rèn)為你不必手動(dòng)執(zhí)行此操作。
如果 Activity2 只有 1 個(gè)圖像并且已經(jīng)調(diào)整大小,我認(rèn)為如果您確實(shí)面臨內(nèi)存問(wèn)題,回收不會(huì)有太大幫助。
并且根據(jù)該文檔,僅建議API級(jí)別低于10的用戶(hù)使用recycle(),并且用戶(hù)的比例很小。?On Android 2.3.3 (API level 10) and lower, using recycle() is recommended.
?
我想推薦使用第三方圖像庫(kù),因?yàn)樗鼈兛梢宰屇庥谧鲞@些無(wú)意義的事情,讓您專(zhuān)注于應(yīng)用程序更重要的部分。
添加回答
舉報(bào)