在浏览android文档时,我发现了以下looper.loop()代码。
public static void loop() {
...
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}
...
msg.target.dispatchMessage(msg);
...
}
}
现在这对我没有意义,因为我认为一个looper工作是延长线程的生命并为处理程序处理下一条消息的队列。但是,你可以看到有一个返回,并且不会返回使得当没有msg时循环退出因此退出线程?
那么looper究竟是如何允许线程继续查询和执行任务的呢?
答案 0 :(得分:1)
但是,你可以看到有一个返回并且不会返回它使得当没有msg时循环退出因此退出线程?
没有。你必须能够在某个时候结束线程。如果你想终止所有者或者干净地关闭整个过程怎么办?
您可以从此代码段推断queue.next()
将阻止是否有更多消息,但我们想要继续监控。只有在有另一条消息时,它才会返回一个值。
返回null
表示发生了其他事情,即looper因任何原因而消失。