2011-06-11 76 views
4

我想問一下之前曾被問過幾次的問題。對不起,如果我正在重新演奏,但我不清楚這裏的最佳解決方案。如何清理位圖資源

問題是「如何在使用ImageView位圖資源後清除ImageView位圖資源,以便我們在內存中沒有對它的引用?」。

下面是一個例子:

  1. 屏幕1重定向到屏幕2
  2. 屏幕2包含控制A(大照片預覽)
  3. 控制A包含ImageView的乙
  4. ImageView的B設定當控制A啓動時

一切工作正常,第一次。一旦完成控制A,我將從屏幕2重定向到屏幕1.此時,控件A或ImageView B或位圖的所有引用都將被使用。他們不是!!!我試過各種解決方案,包括bitmap.recycle(),在控制A,System.gs()中添加finalize(),以及在variouse位置(如onStop()和onDestroy())中的nulling控件,以及所有東西否則在屏幕2上,沒有任何工作!

問題是,當我第二次重新訪問屏幕,從屏幕1到屏幕2(即再次創建預覽照片)時,出現內存異常。這是我的理解,前一個位圖的參考不清理。

如何在我重定向回屏幕1之前殺死它?

我注意到了一件事。如果我通過裁剪縮小照片的尺寸或縮小圖像的尺寸來減少照片的尺寸,那麼在我遇到同樣的問題之前,一切都會順利進行。所以基本上需要更長的時間才能填滿。

我真的很感謝這裏的一些解決方案,因爲這很關鍵。

+0

你有沒有嘗試讓你的ImageView爲空? – 2011-06-11 02:36:47

回答

2

您可能有內存泄漏,該視頻可能會幫助您找到問題Google I/O 2011: Memory management for Android Apps

注:前3.1位圖是在VM堆內存,但在本機內存,這會導致很多問題在注意到泄漏店,進一步信息請參考視頻