InputManagerService

InputManagerService

InputManagerService触摸事件的采集及分发,比如按下,滑动,锁屏拍照等等事件
在SystemService进程启动startOtherService中和WindowManageService一起启动了

InputReader读取事件(InputReader.cpp)
创建个线程循环 Looper线程,通过EventHub的getEvents获取Input事件,转换成EventEntry事件加入到InputDispatcher的mInboundQueue。

InputDispatcher事件派发事件(InputDispatcher.cpp)
创建一个线程派发事件,Looper线程,基于native的Looper实现了Hanlder消息处理模型,如果有Input事件到来就被唤醒处理事件,处理完毕后继续睡眠等待
dispatchOnceInnerLocked ANR触发

派发事件通过findTouchedWindowTargetsLocked找到目标Window,进而通过dispatchEventLocked将消息发送到目标窗口(通过Socket将事件发送到目标窗口)
将监听事件交给ViewRootImpl中的rootView

android 事件响应机制是先 分发(先由外部的View接收,然后依次传递给其内层的最小View)再 处理 (从最小View单元(事件源)开始依次向外层传递。)的形式实现的。