Android系统--输入系统(五)输入系统框架
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响应