主线程的looper如何工作?

时间:2017-11-07 16:31:40

标签: android

我读到了当调用looper.loop()方法时它会阻塞,直到调用looper.quit()。 那么如何调用像活动生命周期方法这样的回调?它们是否已添加到此循环器的MessagQueue中?

1 个答案:

答案 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()