什么必须进入onDestroy()? (如果有的话)

时间:2012-04-11 14:25:31

标签: android

是的,所以在这里我对内存泄漏感到困惑,而且坦率地说不了解真正导致内存泄漏的原因(是的,我已经阅读了http://kohlerm.blogspot.co.uk/2009/02/memory-leaks-are-easy-to-find.html这样的常用链接。

我试图有目的地创建一些,例如在我的活动中留下一个PhoneStateListener子类并打开和关闭它很多时间,无法在DDMS堆或MAT中看到任何异常。然而,在SO上,我一遍又一遍地读到,不仅需要取消注册onDestroy,还需要onPause(PhoneStateListener() isn´t finished

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

更新:我的立场得到了纠正。当一遍又一遍地重新生成我的应用程序时,即使在单实例模式下,它已经注册的PhoneStateListener在调用onDestroy后仍然处于活动状态,并开始加起来。我目前正在以优雅的方式杀死他们,并将在此处发布我的结果。

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

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

1 个答案:

答案 0 :(得分:1)

最好让活动在自己之后进行清理,并准备好在onPause()中死掉 - 在失焦之前总是会调用它,并且不能与用户交互。在此之后可能会调用onDestroy()(但不能保证)。

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