我的應用程序可以加載相當大的圖像。在努力爲內存保守,我試圖用一個臨時的位圖加載,另一個用於改造後的最終圖像:現在Android:「嘗試使用回收位圖」錯誤與臨時位圖
.....
finalBitmap.recycle();
finalBitmap = null;
Bitmap tempBitmap = BitmapFactory.decodeStream(fin, ...);
finalBitmap = Bitmap.createBitmap(tempBitmap, ....);
imgview.setImageBitmap(finalBitmap);
.....
,在這一點上我們與tempBitmap,這是做只需要將解碼的位圖傳輸到createBitmap中的轉換步驟即可。所以:
.....
tempBitmap.recycle();
tempBitmap = null;
.....
而且...它試圖使用一個回收的位圖錯誤,具體是因爲tempBitmap的回收。 tempBitmap沒有顯示,僅在處使用。
這裏怎麼回事?我應該用 「finalBitmap」 貫穿並依靠createBitmap對其進行管理(finalBitmap = Bitmap.createBitmap(finalBitmap,....))?我無法看到將會導致這樣的失敗的tempBitmap的持續依賴。
編輯:是的,空的分配似乎得到適當的,最終垃圾收集,但我很迷惑,爲什麼再循環()上的臨時位圖是在這種情況下,這樣的問題。我得到的印象是createBitmap()持有對它的引用,但爲什麼以及多久?
我錯過了它可能是同一個對象的一點。我將temp設置爲null不會導致副作用,因爲它不會真正釋放對象,而recycle()直接影響它。嗯。我接受你的答案,並希望你能幫我加強我的問題(因爲我認爲這對於人們來說是有用的信息)。 – MartyMacGyver