专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
相关文章推荐
鸿洋  ·  再学安卓 - Zygote ·  3 天前  
今天看啥  ›  专栏  ›  鸿洋

再探 Looper#loop() 为什么不会卡死主线程?

鸿洋  · 公众号  · android  · 2024-12-05 08:41
    

文章预览

笔者之前已经写过一篇关于 Java 层 Handler 机制的文章,从应用开发的角度出发,详细介绍了 Handler 机制的设计背景,以及如何自己如何手写一套 Handler 本篇文章我们将深入 Native 层,一起来探究  Looper#loop()  为什么不会卡死主线程背后的原因 以下,enjoy: 1 开篇 从 Android 2.3 开始,Google 把 Handler 的阻塞/唤醒方案从 Object#wait() / notify() ,改成了用 Linux epoll 来实现。 原因是 Native 层也引入了一套消息管理机制,用于提供给 C/C++ 开发者使用,而现有的阻塞/唤醒方案是为 Java 层准备的,只支持 Java。 Native 希望能够像 Java 一样:main 线程在没有消息时进入阻塞状态,有到期消息需要执行时,main 线程能及时醒过来处理。怎么办?有两种选择。 要么,继续使用 Object#wait() / notify( ) ,Native 向消息队列添加新消息时,通知 Java 层自己需要什么时候被唤醒。 要么 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览