当前位置:首页职业培训

Handler 源码解析:nativePollOnce阻塞和nativeWake唤醒

作者:职业培训 时间: 2025-01-15 22:45:30 阅读:90

Android Handler机制 - MessageQueue如何处理消息

Handler 如何做到阻塞

Android篇:2019初中级Android开发社招面试解答(中)

Handler消息机制组成:

如何保证looper的唯一性

每个线程只有一个looper,而每个Thread中都又一个关键Threadlocal。是用于存放每个线程的looper对象的,存取的方式是通过get/set。相当于一个map的存放方式。键位key是当前线程的实例。value就是looper对象。所以每次创建looper都会去ThreadLocal里面找有没有当前线程的looper。

如何知道 message 发送到哪个handler处理

当使用 Handler.sendMessage() 发送消息时,调用 enqueueMessage 方法内有 msg.target = this 将 Handler 实例赋值给 msg 对象。当 loop() 取出消息时,调用 dispatchMessage 方法根据 target 属性,回调对应 handler 实例的 handlerMessage 方法处理消息。

调用nativeWake唤醒(这部分内容出自头部连接,详细源码分析可看前辈的)

既然有写入消息,那必定要把消息处理掉,所以唤醒了epoll_wait(),然后继续方法调动awoken(),这个方法就是将之前写入的1读出,表示消费这个事件

随后在Java 层的next()@MessageQueue 就被唤醒,读取在enqueueMessage()@MessageQueue 插在队头的消息进行处理

标签:

本文地址: http://www.goggeous.com/b/1/592262

文章来源:天狐定制

版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。

猜你喜欢
猜你喜欢
  • 最新动态
  • 热点阅读
  • 猜你喜欢
热门标签

网站首页 ·

本站转载作品版权归原作者及来源网站所有,原创内容作品版权归作者所有,任何内容转载、商业用途等均须联系原作者并注明来源。

鲁ICP备2024081150号-3 相关侵权、举报、投诉及建议等,请发E-mail:admin@qq.com