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

j2e*_*nue 9 android memory-leaks handler

我很好奇为什么下面是内存泄漏,因为mHandler是在mainThread上创建的,现在当onDestroy被调用时它不会直接杀死线程?在销毁活动后,处理程序如何存在?我还没有新的主题.我是否理解一个处理程序,如果它有消息队列的东西,即使在一个线程被销毁后仍然存在?

参考文档即时阅读在这里 在此输入图像描述

Has*_*eyd 18

Handler's主要用于将事件发布到Thread的MessageQueue.每个Handler实例都与一个线程和该线程的消息队列相关联.

所以当你发布一个有延迟的runnable并退出活动时,MainThread不会被销毁,因为在延迟之后MessageQueue中仍有事件要处理,所以这会导致memoryLeak成为runnable的匿名内部类持有活动 实例的引用.

所以一定要通过调用删除Activity的onStop()中的所有消息

handler.removeCallbacksAndMessages(null);
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

1041 次

最近记录:

9 年,4 月 前