为什么在线程不阻塞时仍调用nativeWake()
?
当线程调用方法enqueueMessage((时,这意味着线程没有阻塞,但为什么仍然调用nativeWake((?
MessageQueue#enqueueMessage
boolean enqueueMessage(Message msg, long when) {
……
if (needWake) {
nativeWake(mPtr);
}
}
当所有消息都在等待时,并且您调用 enqueue 到其中一个消息,它只是检查头部,以防万一顶部安装了重要的东西。
//Log.d("MessageQueue", "Enqueing: " + msg);
Message p = mMessages;
if (p == null || when == 0 || when < p.when) {
msg.next = p;
mMessages = msg;
needWake = mBlocked; // new head, might need to wake up
} else {
Message prev = null;
while (p != null && p.when <= when) {
prev = p;
p = p.next;
}
msg.next = prev.next;
prev.next = msg;
needWake = false; // still waiting on head, no need to wake up
}
}
if (needWake) {
nativeWake(mPtr);
}
所以你只是跳过了重要的部分。