looper如何继续维护一个线程?

时间:2016-12-18 22:39:44

标签: java android

在浏览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究竟是如何允许线程继续查询和执行任务的呢?

1 个答案:

答案 0 :(得分:1)

  

但是,你可以看到有一个返回并且不会返回它使得当没有msg时循环退出因此退出线程?

没有。你必须能够在某个时候结束线程。如果你想终止所有者或者干净地关闭整个过程怎么办?

您可以从此代码段推断queue.next()将阻止是否有更多消息,但我们想要继续监控。只有在有另一条消息时,它才会返回一个值。

返回null表示发生了其他事情,即looper因任何原因而消失。