android - 当线程没有阻塞时,为什么还要调用 nativeWake()?
问题描述
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);
}
所以你只是跳过了重要的部分。
推荐阅读
- mysql-python - 使用 mysql-connect 游标进行上下文管理
- julia - Julia Distributed.jl 问题
- pandas - 按变量创建特定日期列表
- javascript - 如何将此本地时间转换为 UTC
- python - 创建一个太空入侵者类型的游戏,无法弄清楚如何一次打印 1 颗小行星
- tensorflow - tensorflow 安装不正确
- c# - Unity 不执行 C# 脚本
- amazon-web-services - 在 s3 事件上使用“existing: true”会引发“无法验证以下目标配置”
- go - 本地导入包
- javascript - 使用@material-ui/core,我如何制作一个滑块,其中轨道分为左右不同颜色?