【问题标题】:How does a looper continue to maintain a thread?活套如何继续维护线程?
【发布时间】:2016-12-19 07:12:30
【问题描述】:

在查看 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 的工作是延长线程的寿命并将下一条消息排队等待处理程序处理。但是,您可以看到有一个 return,并且该 return 不会使它在没有 msg 时退出循环从而退出线程?

那么looper究竟是如何让线程继续查询和执行任务的呢?

【问题讨论】:

    标签: java android


    【解决方案1】:

    但是,您可以看到有一个返回,并且该返回是否会导致当没有 msg 时循环退出从而退出线程?

    没有。您必须能够在某个时候结束线程。如果您想终止所有者或确实彻底关闭整个进程怎么办?

    您可以从这个 sn-p 推断出queue.next() 如果没有更多消息但我们想继续监视,将阻塞。它只会在有另一条消息时返回一个值。

    返回null 表示发生了其他事情,即无论出于何种原因,looper 正在消失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      相关资源
      最近更新 更多