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 次 |
| 最近记录: |