如果向控件/视图添加侦听器而不删除它,是否会创建内存泄漏?例如,onCreate
会向侦听修改的EditText
添加侦听器。你需要在onDestroy中删除这个监听器吗?
我想如果你使用一个匿名监听器或一个实现监听器的局部变量,当Activity
由于作用域规则而被销毁时,内存将被释放。
我能看到内存泄漏的唯一方法是监听器是否在intent对象中传递。想法?
答案 0 :(得分:8)
听众自己不会造成内存泄漏。但是,它们经常使用不当,因此可能导致泄漏。有时您会看到对象引用组件的代码(例如,用于在那里显示消息),其中有一个侦听器,它可以(可能间接地)引用第一个对象。这形成了一个循环,其所有成员共同生活和死亡。当Component是一个短命的对话框时,你可能会遇到问题。初学者倾向于使用像
这样的对象class MyKitchenSink implements Runnable, KeyListener, ....
可能有很多引用,并且更容易构建内存泄漏 * 。不创建“普遍类”是要走的路。
* 这与C
中没有“真正的”内存泄漏一样,因为所有对象都可以访问,并且可以在需要时使用。它只是让对象可以在比预期更长的时间内到达,这就像泄漏一样让你感到内存。
答案 1 :(得分:2)
除非控件/视图以外的内容引用侦听器,否则不应创建内存泄漏 - 无需在onDestroy中删除侦听器...