窗口管理的输入部分主要完成按键、触摸板、鼠标等输入设备的输入,功能包括,输入设备的输入及向焦点窗口和焦点视图的事件派发,事件的插入,事件的过滤,事件的拦截等功能。
整个输入系统包括服务端和客户端两部分,服务端部分主要完成输入设备事件的读取、事件的映射、事件的插入、事件的过滤、事件的拦截等功能;客户端部分主要完成事件向焦点窗口和焦点视图的派发。
输入系统整个架构采用的是管道过滤器模式(Pipe and Filter)架构模式。服务端的InputReader和InputDispatcher对象及客户端的InputQueue对象对应着过滤器构件,具有各自的输入、处理、输出单元,三者通过两个管道连接件连接到一起。
下图是服务端的系统类图
下图是输入系统客户端事件派发过程
参考文章:
这篇文章讲了窗口管理的输入机制,有服务端和客户端的流程图及调用过程,讲的很清晰。
Android按键消息传播流程(WindowManagerService.java)
这篇文章是基于Android 2.2的分析。这里面讲了KeyEvent的过滤与分发。