2011-03-24 250 views
5

我現在正在處理內存泄漏。所以我很好奇,如果有任何方法來手動銷燬視圖(在活動onDestroy方法)? 由於父子引用,上下文引用,標籤等原因,整個佈局(activity contentView)有點複雜。銷燬視圖(佈局)

GC現在無法收集我的佈局。而且問題隱藏在視圖結構中......所以唯一能找到它的方法是嘗試銷燬葉片視圖,以便GC在某個時候收集根視圖並讓我知道問題所在。

我的佈局結構:ViewFlipper(RelativeLayout的,ListView控件(ViewFlipper(RelativeLayout的,RelativeLayout的)))

+1

請停止在標題中寫標籤。 – 2011-06-14 22:46:58

回答

10

您可以從ViewGroup中刪除視圖,但無法手動銷燬視圖。如果你得到內存泄漏,通常是因爲你在視圖外部持有對你的Context的長期引用。

  1. 不要存放任何具有靜態字段上下文(即繪圖資源 - 位圖是罰款)
  2. 刪除所有的處理程序,清除所有定時器
  3. 不要守住線程/ AsyncTasks上下文,或者如果你確定他們是弱引用的。

視圖包含與其他視圖有關的信息(即另一視圖的上下文)是好的,因爲所有視圖都被銷燬 - 這很可能是因爲上下文被某些東西持有(並且上下文有對大多數事情的處理 - 即所有的視圖),你無法釋放內存。

1

你有沒有在你瀏覽任何處理器/信息,你可能需要停下來?

我有一個類似的問題,我在一個動畫中定期發送消息。我需要停止/忽略這些消息,並在觸發活動OnDestroy()後再停止排隊。

+1

是的,我意識到你的問題是強迫觀點自由,但我不知道這是否可能。至少,我從來沒有見過任何暴露的內存管理調用。我希望有。 – CatalystNZ 2011-03-28 22:59:01