我很好奇下面为什么会发生内存泄漏,因为mHandler是在mainThread上创建的,而现在在调用onDestroy时,它只会杀死线程吗?活动销毁后处理程序如何存在?我还没有创建新线程。我是否可以理解,即使线程被破坏后,如果消息处理程序还保留了消息处理程序,处理程序也会保留吗?
参考文档即时阅读在这里
处理程序主要用于将事件发布到线程的MessageQueue。每个Handler实例都与一个线程和该线程的消息队列关联。
因此,当您延迟发布一个可运行对象并退出活动时,MainThread不会被销毁,因为在延迟之后,MessageQueue中仍有事件要处理,因此这可能导致memoryLeak作为您可运行的匿名内部类持有活动 实例的引用。
因此,请确保通过调用来删除Activity的onStop()中的所有消息
handler.removeCallbacksAndMessages(null);
这将在您退出活动之前清除所有待处理的消息和回调。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句