ALooper_pollAll return ALOOPER_POLL_TIMEOUT什么时候?

When does ALooper_pollAll return ALOOPER_POLL_TIMEOUT?

假设,将几个具有相应回调的文件描述符添加到循环程序中,然后 ALooper_pollAll() 被调用,超时为 1000 毫秒.不久之后,一些文件描述符变得可用,循环程序开始调用它们的回调。假设最后一次调用的回调恰好在 ALooper_pollAll 开始后 200 毫秒后结束。现在,如果两个描述符中的任何一个都没有更多数据,函数 return ALOOPER_POLL_TIMEOUT 何时会出现?是800ms后(回调结束后的剩余超时时间),还是1000ms后(初始超时)?

看了Looper's sources才明白是前者。在内部 ALooper_pollAll 循环调用 ALooper_pollOnce ,在每次后续调用后更新(减少)超时时间,所以最终当它变为 0 时,返回 ALOOPER_POLL_TIMEOUT