我需要根據某些事件爲佈局設置不同的背景。這導致OOM異常。我添加了代碼來解決這個問題,但現在這造成了再循環位圖問題。獲取畫布:在設置佈局背景時使用回收的位圖
下面是代碼:
if (change_bg != 0) {
//Garbage collect the current BG.
BitmapDrawable bg = ((BitmapDrawable)llayout.getBackground());
llayout.setBackgroundResource(0);
if (bg != null) {
bg.getBitmap().recycle();
bg = null;
}
System.gc();
llayout.setBackgroundResource(change_bg);
llayout.invalidate();
}
這不會發生的第一時間,但一些隨機事件4-5之後。
如果我不打電話bg.getBitmap().recycle
,會遇到OOM異常。
任何人都可以指出錯誤或建議在同一視圖中設置佈局背景 的正確方法嗎?
注:
我刪除了android:背景= 「@繪製/ bg_initial」 的; ayout,但它沒有任何效果。
該應用程序正在使用其他視圖與佈局具有背景圖像和問題 沒有看到這些意見。
從表面上看這似乎並沒有被記憶的問題,但問題設置在同一視圖不同 時的背景。我可以實現不同的切換背景圖片 ,但這似乎矯枉過正。如果有人提供簡單而真實的解決方案,會很高興。
編輯:
我添加了背景位圖的垃圾收集的OnDestroy()的代碼,並且似乎有 解決這個問題..至少我現在無法立即重現問題。
但我想知道這是什麼解釋。我沒有將佈局圖或 圖像保存在一個靜態變量中,因此我不確定它是否保存在內存中。我想知道 是怎麼回事。有人可以解釋這個嗎?
如果您仔細閱讀代碼,您的建議已經完成。 llayout.setBackgroundResource(0)。並且在第二次調用setBackground時引發循環位圖異常。我沒有使用ImageView,而是設置線性佈局背景。 – Mano