注:下文摘自RickAi的博客
从源码角度看InputManagerService-RickAi
类图
整体流程图
- 用户轻点屏幕,linux 内核产生中断,向 /dev/input/ 目录下的设备文件 eventxx 下入数据
- native 层,EventHub 通过 epoll 监测到文件被写入,使用 inotify 读取文件中的数据
- InputReader 将事件数据解析成装满 RawEvent 的缓冲区中,随后批量使用 InputMapper 进行处理
- 用户的触摸事件最终被加工为 NotifyMotionArgs,随后被批量插入到 InputDispatcher 的队列中
- InputDispacher 从队列中取出 EventEntry 数据进行派发
- 获取触摸事件目标窗口列表,使用 socketpair 向客户端发送输入事件
- 客户端在将事件分发到各个窗口,处理完毕后会调用 finish 告诉服务端事件已经处理完成
- InputDispatcher 收到事件处理完成通知,重新初始化 ANR 相关变量