让我们假设,将几个带有相应回调的文件描述符添加到looper中,然后将 alooper_pollall()调用,超时为1000毫秒。此后不久,某些文件描述符可用,并且Looper开始调用它们的回调。假设自从 alooper_pollall 开始200ms之后,最后一个呼叫的回调已完成。现在,如果任何一个描述符都没有更多数据,则该函数将何时返回alooper_poll_timeout?是在800ms之后(回调完成后剩余的超时时间)还是在1000ms之后(初始超时)?
查看looper的来源后,很明显它是前者。内部 alooper_pollall 呼叫 alooper_pollonce 在循环中,更新(减少)每个随后的调用后的超时时间,因此最终在0, alooper_poll_poll_timeout 返回。