IMS

Android InputManagerService

IMS的工作原理

Posted by LXG on February 20, 2019

注:下文摘自RickAi的博客

从源码角度看InputManagerService-RickAi

类图

InputManagerService_uml

整体流程图

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

InputManagerService

IMS 初始化与启动

InputManagerService_uml_2

输入事件的读取与解析

InputManagerService_uml_3

输入事件的处理与反馈

InputManagerService_uml_4