handler的消息延时是怎么实现的?
postDelay:最后也是封装一个消息调用sendMessageDelayed
messageQueue其实是一个单链表,消息的插入是按时间顺序插入的。
sendMessageAtFrontOfQueue:when == 0
write(mWakeEventFd, &Inc,sizeof(uint64_t): 向mWakeEventFd写入一个数字1,线程就可以收到MWakeEventFDA的一个可读事件,唤醒线程,从队列拿出next消息进行处理
queue.next(): 消息队列里没有消息时,next() 会阻塞在那
next(): 返回可用消息--有时候queue里有消息,但是when 还没到
网友评论