0

所以在这里我对内存泄漏很着迷,坦率地说,我不明白什么会真正导致内存泄漏(是的,我已经阅读了常见的链接,例如http://kohlerm.blogspot.co.uk/2009/02/memory -leaks-are-easy-to-find.html)。

我试图故意创建一些,例如通过在我的活动中留下一个 PhoneStateListener 子类并打开和关闭它无数次,在 DDMS 堆或 MAT 中看不到任何异常。然而在SO上,我一遍又一遍地阅读,不仅需要取消注册onDestroy,还需要取消注册onPause(PhoneStateListener()没有完成

问题:有这样的清单吗?额外的问题:PhoneStateListener 是否真的会创建泄漏,除非它在 ​​onPause/onDestroy 等上取消注册。

更新: 我的立场得到纠正。当一遍又一遍地重新生成我的应用程序时,即使在单实例模式下,它已注册的 PhoneStateListener(s) 在调用 onDestroy 后仍然存在,并开始累加。我目前正在研究一种优雅的方式来杀死它们,并将在此处发布我的结果。

UPDATE2:注销监听器的正确方法是:instanceOfTelephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE); ... 根据 API

UPDATE3:正如承诺的那样,将其与一个措辞更好的问题联系起来:https ://stackoverflow.com/a/4607435/821423

4

1 回答 1

1

活动在自己之后进行清理并准备在 onPause() 中死去是一种很好的做法 - 这总是在它失去焦点之前被调用,并且不能与用户交互。onDestroy() 可能在此之后调用(但不保证)。

您的活动是否不是用户的焦点,它不再需要任何听众,因为它无法显示这些听众的结果。

于 2012-04-11T19:45:19.790 回答