2011-02-11 51 views
3

我已經擴展了View並將其傳遞給了我的Activity的一個實例,以便視圖可以訪問一些成員變量和方法。視圖引用顯示它的活動是否安全?

但現在我認爲這可能是一個潛在的內存泄漏,因爲即使在Activity被銷燬之後,它仍然對成員變量中的視圖有引用,反之亦然。所以垃圾收集器可能永遠不會清理它們。

但是,我已經在一些Google API演示和示例中看到他們已將Activity作爲偵聽器傳遞給視圖。

回答

6

這很好,請記住,任何使用其構造函數以編程方式創建的普通視圖都需要使用Context作爲參數 - 通常,您給構造函數的上下文只是this或活動本身。所以你的View已經有了一個對它的Activity的引用。您也可以使用其getContext()方法在View類中獲取它。

當活動被破壞時,它將一直保留在內存中,直到GC可以將其移除。但是,作爲其onDestroy方法的一部分,它將對其包含的所有視圖的引用設置爲null,以此類推向View樹。然後GC可以安全地刪除其所有組件視圖。一旦完成,沒有引用留給活動,另一個GC通行證可能會刪除它。

+0

謝謝。我不清楚在視圖被破壞的過程中究竟發生了什麼。 – Tenfour04 2011-02-11 17:28:54

3

所有View構造函數都將Context作爲參數,因此它們已經有一個引用。也許發佈自定義視圖的代碼,以便我們可以查看它。

相關問題