所以在这里我对内存泄漏很着迷,坦率地说,我不明白什么会真正导致内存泄漏(是的,我已经阅读了常见的链接,例如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