我很好奇为什么下面是内存泄漏,因为 mHandler 是在 mainThread 上创建的,现在当调用 onDestroy 时它不会杀死线程吗? Activity 被销毁后,处理程序如何存在?我还没有发新帖。我是否理解一个处理程序,如果它有东西,即使线程被销毁,消息队列也会保留?
我正在阅读的引用文档是 here
最佳答案
处理程序主要用于将事件发布到线程的消息队列。每个处理程序实例都与单个线程和该线程的消息队列相关联。
所以当你发布一个带有延迟的runnable,并退出activity时,MainThread不会被销毁,因为在延迟之后MessageQueue中还有事件需要处理,所以这会导致memoryLeak 因为你的 runnable 匿名内部类持有 activity instance 的引用。
因此请确保通过调用
删除 Activity 的 onStop() 中的所有消息handler.removeCallbacksAndMessages(null);
这将在离开您的 Activity 之前清除所有待处理的消息和回调。
关于Android - mainThread 处理程序会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41477830/