handler的消息延时是怎么实现的?


postDelay:最后也是封装一个消息调用sendMessageDelayed


messageQueue其实是一个单链表,消息的插入是按时间顺序插入的。
sendMessageAtFrontOfQueue:when == 0

write(mWakeEventFd, &Inc,sizeof(uint64_t): 向mWakeEventFd写入一个数字1,线程就可以收到MWakeEventFDA的一个可读事件,唤醒线程,从队列拿出next消息进行处理

queue.next(): 消息队列里没有消息时,next() 会阻塞在那

next(): 返回可用消息--有时候queue里有消息,但是when 还没到

网友评论