第六章:输入系统(3)-框架

接下来的几个小节我们会深入分析输入子系统,首先先来了解一下输入子系统的框架。

假设有一款andriod平板,上面安装了很多应用程序,以及系统功能(关机,开机,增加减少音量),同时存在很多输入设备如按键,触摸屏,外接usb键盘鼠标等。那么出现了一个问题,我们的输入事件应该对那个应用程序,或者我们的输入事件应该是和那个应用程序进行通信,如:我们按下按键之后是启动输入法呢?还是减少音量呢?如下图:
在这里插入图片描述
当按下按键是需要减少音量,那么这个消息应该是发送给系统消息,如果是启动微信,那么这个这个消息应该是发送给应用程序,所以我们可以分成三个部分:读取,分发,处理。
1.读取:支持多设备输入(如GPIO键盘,或者遥控器,触摸屏等),即插即用,支持多语言(映射:同一按键可以获取不同国家的字符,如按下1键可以是美国的a,也可以是法国的字母)
主要包含:linux驱动与应用处理
2.分发:分辨消息,是发送给谁,比如按键,按键有很多种,如系统按键控制音量,电源等。还有globalkey(特殊按键),Userkey(发送给APP),记忆触摸屏等等,这些都需要分辨,分辨之后在进行发送,发送之前先找要找到目标APP。
3.处理:APP接收到后,进行相应的处理。如启动输入法,或者某些函数。
大致框架如下
在这里插入图片描述
按照之前的3和部分进行划分:
在这里插入图片描述
在分发的时候,对象太对了,所以需要WMS(window Manage Service)来进行协助,在读取部分是一个Reader线程循环,如果读取到了数据就发送给Dispacher线程,然后该线程确定发送给谁之后,在发送给进程APP。其中Reader线程与Dispacher线程属于systemServer进程。

具体细节我们后续再进行分析,该小节主要讲解一下在andriod中输入子系统的框架。

猜你喜欢

转载自blog.csdn.net/weixin_43013761/article/details/87808196