
1.1 整体链路概览先画个简单的图在脑子里:触摸屏硬件 → 内核驱动 → EventHub → InputReader → InputDispatcher → 窗口 → 应用层这条链路上,最核心的两个角色就是InputReader和InputDispatcher。它们都运行在系统进程system_server中,属于同一个线程——InputReader线程和InputDispatcher线程。你可能会问:为什么要把它们分开?我刚开始研究这部分源码时也有这个疑问。后来在项目中遇到过一次触摸卡顿的问题,排查下来才发现,如果让Reader和Dispatcher合在一起,读取事件时如果分发阻塞,整个系统都会卡住。所以Google把它们拆成了两个独立线程,各司其职。1.2 InputReader:从硬件到事件的翻译官InputReader的职责很明确:从内核读取原始事件,解析成Android能理解的事件结构。它通过EventHub与内核驱动交互。EventHub会监听/dev/input/目录下的设备节点。每当有触摸事件产生,内核通过read()系统调用把原始数据传上来。核心流程:EventHub 通过 epoll 监听输入设备InputReader 循环调用 EventHub::getEvents() 获取原始事件将原始事件解析为 RawEvent 结构通过 InputMapper 转换成 NotifyArgs放入 InputDispatcher 的输入队列这里有个关键点:InputMapper。不同的输入设备有不同的Mapper。触摸屏用To