我很好奇为什么下面这段代码会造成内存泄漏,因为mHandler是在主线程上创建的,现在当onDestroy被调用时,它不会只是杀死线程吗?handler如何在activity销毁后还存在?我没有新建线程。我应该了解到,如果handler有消息队列中的内容,即使线程被销毁,它也会继续存在吗?
我正在阅读的参考文献在这里
。
我正在阅读的参考文献在这里
![enter image description here](https://istack.dev59.com/4Yuet.webp)
Handler主要用于将事件发布到线程的消息队列中。每个Handler实例都与单个线程及其消息队列相关联。
因此,当您使用延迟时间发布可运行对象,并退出活动时,如果消息队列中仍有待处理的事件,将不会销毁MainThread。这可能会导致内存泄漏,因为您的匿名内部类runnable持有活动实例的引用。
因此,请确保在Activity的onStop()中调用并删除所有消息。
handler.removeCallbacksAndMessages(null);
在离开您的活动之前,这将清除所有未处理的消息和回调。
它们可以,但不是Handler或Runnable的处理程序。 Handler的工作方式是与线程相关联的。该线程必须具有Looper。 Looper具有消息队列。当您postDelayed时,将Runnable添加到该Looper的消息队列中。因此,线程本身具有对Runnable的引用。因此,该Runnable将被泄漏,并且如果非静态,则父类也将被泄漏。