Android - mainThread 处理程序会导致内存泄漏吗?

标签 android memory-leaks handler

我很好奇为什么下面是内存泄漏,因为 mHandler 是在 mainThread 上创建的,现在当调用 onDestroy 时它不会杀死线程吗? Activity 被销毁后,处理程序如何存在?我还没有发新帖。我是否理解一个处理程序,如果它有东西,即使线程被销毁,消息队列也会保留?

我正在阅读的引用文档是 here enter image description here

最佳答案

处理程序主要用于将事件发布到线程的消息队列。每个处理程序实例都与单个线程和该线程的消息队列相关联。

所以当你发布一个带有延迟的runnable,并退出activity时,MainThread不会被销毁,因为在延迟之后MessageQueue中还有事件需要处理,所以这会导致memoryLeak 因为你的 runnable 匿名内部类持有 activity instance 的引用。

因此请确保通过调用

删除 Activity 的 onStop() 中的所有消息
handler.removeCallbacksAndMessages(null);

这将在离开您的 Activity 之前清除所有待处理的消息和回调。

关于Android - mainThread 处理程序会导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41477830/

相关文章:

android - [Android]ListView剪切TextView文本

java - Android 计算器代码中的静态变量有问题吗?

java - Android 日历 View 更改文本颜色

c++ - 使用 _crtBreakAlloc、_CRTDBG_MAP_ALLOC 追踪插件中的内存泄漏

go - 停止HTTP调用并使用一系列处理程序返回错误;可能吗?

javascript - const 处理程序 = 函数(事件)= SCRIPT1002 : Syntax error (IE10)

java - Android Studio 启动失败,因为我找不到

c++ - 引用计数智能指针引用计数如何工作?

python - Pyramid 调试工具栏导致内存 "leak"

android - 处理程序中的问题与 android 中的消息