本博客在 https://wkmcyz.notion.site/InputManagerService-616004c0a3fa4324b952f7e8563a010f 可以获得更好的阅读体验。
Android 的触摸事件,可以分为三部分。
第一部分是硬件部分,检测触摸事件,这一步需要传感器之类的组件来完成。这部分主要是硬件相关的知识。
第二部分是操作系统部分, 将触摸事件传递给应该接受它的目标应用。本篇后面会说的 InputManagerService 的相关内容就是解释这部分的流程的。
第三部分是控件级别(即各个 View 类)的处理,来消化该触摸事件。这是 Android 应用的 view 触摸事件处理,不在此讨论
InputManagerService 是 Android 的一个系统服务,运行在 system_server 进程中,和 WMS 一起配合维护着 Android 的输入事件的管理,也就是上面提到的 “操作系统处理” 的部分。
想象一下,这样一个传递触摸事件的管理者需要进行哪些操作。主要应该分为三步,第一是从硬件部分接收事件;第二是进行一些自己的处理;第三是将这部分事件传递给其对应的进程以及对应的控件。我们也主要对这三步进行说明。
Android 设备在发生输入事件的时候,会将触摸事件写入一个文件,InputManagerService 依赖 epoll 机制从该文件读取触摸事件的信息,读取到的便是原始的输入事件。这就是最初 InputManagerService 的输入。