说说android线程间消息传递机制
msg.target: Handler
msg.recycleUnchecked(): 回收message,将这条消息重置后,放入一个单链表
msg.callback: Runnable
Handler hook 技术: 通过反射给mCallback赋值,mCallback.handleMessage(msg) return false
nativePollOnce: 阻塞在那监听是否有别的线程往当前线程的消息队列里发消息,如果有,就会唤醒阻塞,或者超时了nextPollTimeoutMilllis,也会唤醒阻塞。
epoll_wait:会一直阻塞在那,返回的情况:1.出错了,eventCount < 0, 2. 超时了,eventCount == 0,3. 有事件发生了, eventCount就是事件的个数。
每个事件对应一个fd
发消息
sendMessageAtTime:在这个时间分发消息
nativeWake:唤醒消息队列所在的线程
线程B往线程A的消息队列里插入一条消息的同时往eventfd里写一个数,这样线程A就能收到事件了,就会被唤醒,唤醒后就从队列里取消息进行处理
网友评论