2012-05-18 18 views
1

我有幾個由自定義適配器(ArrayAdapter和CursorAdapter)驅動的ListViews。在適配器的getView()和bindView()函數中,我在ListView中創建了一行,並將一個監聽器設置爲該行中的特定UI元素。Android - 在適配器中處理監聽器

當前,隨着ListView行被髮送到Recycler,偵聽器仍然被連接起來,所以內存永遠不會被釋放。我沒有看到行被丟棄時的回調,這會讓我有機會在行被回收之前分離聽衆。

如何管理ListView行中的偵聽器?我只有getView()/ bindView()將偵聽器添加到該行,但沒有刪除它們。

感謝

回答

0

在玩了一段時間之後,我決定使用ViewHolder模式,並且在其中我有一個跟蹤偵聽器的變量。當提供回收視圖時(如適用),我拔出偵聽器(它仍然存在確實),並確保在創建新偵聽器並將其註冊到位之前將其註冊爲偵聽器。這可能不會捕獲每個偵聽器,但是我可以將一些ListView行卡在內存中。

0

Android操作系統是否ListView行視圖的回收爲您服務。視圖會在用戶滾動列表時被動態生成,並在視圖不可見時被破壞。無論何時其他應用程序需要更多內存並且某些對象未被使用,Android OS都會破壞視圖,垃圾收集排序。

至於你關於刪除listeners的問題,它們會自動被刪除,因爲它們指向的對象不再存在,並且它們也被標記爲垃圾對象。

+1

感謝您的回覆。回收很好,但與實際處置不同。當有外部引用(監聽器)時,Android如何能夠處理該對象?我的意思是,是不是內存泄漏的定義? – Tyler