如果将侦听器添加到控件/视图,但不将其删除,那会造成内存泄漏吗?例如,onCreate
将一个侦听器添加到EditText
中以侦听修改。您是否需要在onDestroy中删除此侦听器?
我想像一下,如果您使用匿名侦听器或实现侦听器的局部变量,则由于作用域规则而破坏了Activity
时,将释放内存。
我看到内存泄漏可能性的唯一方法是,如果侦听器是在意图对象中传递的。有什么想法吗?
最佳答案
侦听器本身不会造成内存泄漏。但是,它们通常使用不当,因此可能导致泄漏。有时,您会在代码中看到一个对象引用了一个组件(例如用于在其中显示消息),该组件具有一个侦听器,该侦听器(可能间接地)引用了第一个对象。这形成一个循环,其所有成员共同生活和死亡。当“组件”是一个旨在短暂存在的对话框时,您可能会遇到问题。初学者倾向于使用诸如
class MyKitchenSink implements Runnable, KeyListener, ....
可能有很多参考,使建立内存泄漏更容易*。不创建“通用类”是可行的方法。
*像
C
一样,这不是“真正的”内存泄漏,因为所有对象都可以访问,并且可以根据需要使用。它只是使对象可访问的时间比预期的要长得多,这会像泄漏一样吞噬您的内存。