Android系统--输入系统(五)输入系统框架
1. Android设备使用场景:
假设一个Android平板,APP功能、系统功能(开机关机、调节音量)、外接设备功能(键盘、触摸屏、USB外接键盘/鼠标)。
2. 引入输入系统:
(1)触摸屏控制APP (2)外接设备控制系统功能
3. 输入系统三部分
读取事件
分发事件
处理事件
4. 读取事件分析
4.1 读取支持功能
-
支持多设备
GPIO键盘
遥控器
外接USB键盘鼠标
触摸屏
即插即用:可以随时接入或者拨出
支持多语言(映射):同一个同一按键,可能得出不同结果(针对不同国家)
4.2 读取实现
-
Linux驱动
GPIO键盘,生成设备节点(/dev/input/event0)
遥控器,生成设备节点(/dev/input/event1)
-
应用处理
open/read 设备节点 /dev/input/event
检测有无数据
检测设备的拔插
处理(映射)
5. 分发事件分析
5.1 分发支持功能
-
分辨事件
按键(SystemKey:音量键、电源键;GlobaKey:特殊键;UserKey:发给APP)
触摸屏(virtualKey、手势->转化)
-
发送事件
找出当前APP
发送给APP(源代码分析)
6. 处理事件分析
6.1 处理事件流程分析
点击:执行某些函数
-
输入框
启动输入框
显示文字
7. 输入系统代码框架
7.1 输入系统代码框架图
7.2 输入系统框架说明
核心:进程间通信(socketpair机制)
Reader线程不断循环从设备节点读取数据
映射
发送给InputDispatcher线程
通过windowManagerService确定输入事件
将确定的输入事件需要发送APP
APP响应