IM输入事件系统
这里的输入事件指,触摸屏、按键,不包括传感器
- 底层
两条线程,一条读事件,一条向上发事件,
读取输入事件,采用epoll / poll机制去读取输入节点 - 框架层
InputManagerService只是个包装类,所有工作都是本地的InputManager在做,包括跟更底层的那两个读与派发线程交互。当然,IMS也不是一无是处,它在框架层跟其它模块交互,比如WMS啦
WMS, 与IMS交互,获得最早的input事件,决定派发的根
PWM, 处理特殊输入事件,如电源键,HOME
InputChannel, IM与View客户端窗口类的交互通道,PIPE机制,只有在WMS确定让某个窗口接收输入事件时,才接上
ViewRootImpl,真是一把手,输入事件在客户窗口的派发,由它开始 - 应用层
关注下Key / Touch在View树的传递与处理机制,无非就是个责任链模式 + 模板方法模式