文章预览
笔者之前已经写过一篇关于 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 层自己需要什么时候被唤醒。 要么
………………………………