我读到了当调用looper.loop()方法时它会阻塞,直到调用looper.quit()。 那么如何调用像活动生命周期方法这样的回调?它们是否已添加到此循环器的MessagQueue中?
答案 0 :(得分:0)
你的猜测是正确的。它们确实被添加到MessageQueue
。 looper等待MessageQueue
。
Looper.loop()
是一个无限循环。作为紧密循环的一部分,looper等待其成员next()
的MessageQueue mQueue
。
MessageQueue
的{{3}}方法阻塞,直到它有Message
。当新的Message
到达时,它会解锁。然后,looper通过调用next()对Message
执行某些操作。 UI / ActivityLifeCycle更新也是排队到此MessageQueue的消息。如果调用dispatch() method
,则会调用looper.quit()
。这使得mQueue.next()
返回null。当looper.loop()检测到null时,它会破坏紧密循环并mQueue.quit()
。