我已经阅读了文章http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html。在本文中,建议使用带有WeakReference的静态内部类。许多内部类用于事件侦听器。那些内部类也会导致内存泄漏吗?那些内在阶级应该是静态的吗?
答案 0 :(得分:39)
那些内部类也会导致内存泄漏吗?
可能。这取决于那些听众注册的内容。
例如,OnClickListener
编写良好的Button
不应导致内存泄漏,因为即使OnClickListener
可能是内部类并且具有隐式引用Activity
,整个对象集都与活动紧密相连。因此,当活动被销毁时,活动Button
和OnClickListener
都可以作为一个整体进行垃圾收集。
但是,该进程持有LocationListener
系统服务注册的LocationManager
。因此,即使活动被破坏,听众也将保持注册状态。如果该侦听器是内部类,它将继续保持对该活动的隐式引用,并且您将发生内存泄漏。
那些内心阶级应该是Staic吗?
可能。在大多数情况下,正确答案是“如果您正在注册除UI之外的其他侦听器,请务必在适当的位置注销它”。在这种情况下,不会有泄漏。
任何人都可以给我任何示例代码,事件监听器可以如何防漏使用。
不是抽象的,没有。