2011-02-15 335 views

回答

36

可以將這些內部類也引起內存泄露?

可能。這取決於聽衆註冊的內容。

例如,良好的書面OnClickListener用於Button不應導致內存泄漏,因爲即使OnClickListener可以是內部類和具有到Activity的隱式引用,整個組對象都只是與活動相關聯。因此,當活動被銷燬,活動,ButtonOnClickListener都可以作爲垃圾回收爲一體。

但是,LocationListener已註冊到LocationManager系統服務,由該進程持有。因此,即使活動被破壞,聽衆仍將保持註冊狀態。如果該偵聽器是一個內部類,它將繼續保持對該活動的隱式引用,並且您將有內存泄漏。

如果這些內部類是Staic一個?

可能。在大多數情況下,正確的答案是「如果您註冊的是除UI之外的其他監聽器,請務必在適當的位置取消註冊」。那樣的話,就不會有泄漏。

任何人都可以給我任何示例代碼如何事件偵聽器可以使用防泄漏。

不是在抽象的,沒有。

+0

這是一個簡單的監聽器,導致內存泄漏http://stackoverflow.com/questions/7083441/android-alertdialog-causes-a-memory-leak – user4o01 2014-02-09 19:25:33