关键线程:EventHub,InputReader,InputDispatcher
EventHub:
由于Android继承Linux,Linux的思想是一切皆文件,而输入的类型不止一种(触碰,写字笔,键盘等),每种类型都对应一种驱动设备,而每个硬件驱动设备又对应Linux的一个目录文件(dev\input\event0),比如event0就是触摸屏事件,这个文件被封装成event类型数据,EventHub通过getevents()方法与硬件交互,获得其event,通过Linux的inotify机制发送给InputReader线程。
InputReader:
读取event,对event进行层层封装,最终通过inotify机制发送给InputDispatcher。
InputDispatcher:
与wms交互,与应用UI主线程建立InputChannel通道,应用UI主线程通过viewRootlmpl层层分发,直到找到对应匹配的view将其事件消费。