外观
如何理解一次触摸从硬件到 View 经过哪些环节?
标准回答
触摸硬件通过驱动产生输入事件,EventHub 读取 Linux 输入设备事件,InputReader 解析设备数据、坐标和 Display 映射,InputDispatcher 再依据窗口状态选择目标,并通过 InputChannel 等通道交给应用。应用的 ViewRootImpl 输入管线处理事件,进入窗口与 Activity 的分发,再由 DecorView 和 ViewGroup 分发到具体 View。完整链路还包含系统策略处理、输入法和事件完成反馈。因此触摸无响应时,要分别判断硬件事件有没有产生、系统选中了谁、应用是否及时消费,而不是只检查 onTouchEvent。
延伸追问
InputChannel 不等于每个 MotionEvent 都要经一次普通 Java AIDL 调用;输入传输有专门通道。
内容来源
- Android Framework 知识手册 · 原条目
5-1