如果未从已销毁的活动中删除,侦听器是否会创建内存泄漏?

Spi*_*idy 6 java android memory-leaks android-activity

如果向控件/视图添加侦听器而不删除它,是否会创建内存泄漏?例如,onCreateEditText侦听修改的侦听器添加侦听器.你需要在onDestroy中删除这个监听器吗?

我想如果你使用一个匿名监听器或一个实现监听器的局部变量,当Activity由于作用域规则而被销毁时,内存将被释放.

我可以看到内存泄漏的唯一方法是监听器是否在intent对象中传递.思考?

maa*_*nus 8

听众自己不会造成内存泄漏.但是,它们经常使用不当,因此可能导致泄漏.有时您会看到对象引用组件的代码(例如,用于在那里显示消息),其中有一个侦听器,它可以(可能间接地)引用第一个对象.这形成了一个循环,其所有成员共同生活和死亡.当Component是一个短命的对话框时,你可能会遇到问题.初学者倾向于使用像

class MyKitchenSink implements Runnable, KeyListener, ....
Run Code Online (Sandbox Code Playgroud)

它可能有很多引用,并且更容易构建内存泄漏*.不创造"普遍类"是要走的路.


*它没有"真正的"内存泄漏C,因为所有对象都可以访问,如果你愿意可以使用.它只是保持对象可达的时间比预期的长得多,这就像泄漏一样让你的记忆吃掉.