Android 输入系统

系统详解 http://blog.csdn.net/myarrow/article/details/7091061

键盘移植 http://blog.csdn.net/louiswangbing/article/details/661095

网上相关资料很多,推荐上面两篇文章,这里主要基于Android4.0对Input系统作一下总结。

 

1 InputManager系统服务

我们知道Android由诸多系统服务组成,它们在系统启动的时候由Zygote孵化出来,自始至终运行于后台,这其中,WindowManagerService就是一个很重要的服务,它负责对整个窗口系统的管理,而在窗口系统中,用户的输入输出系统又是一个很重要的部分,于是,InputManager便承担起了全部的责任。

InputManager开启两个线程,即InputDispacher和InputReader,它们才是真正工作的两个线程。


2 InputManager本地服务

为什么InputManager系统服务需要通过JNI开启InputManager本地服务呢?

显然,用户的输入(按键,触摸)来源于底层驱动,必须与底层的数据进行通信,所以要由JNI调用更低级的C语言。


3 EventHub

虽然按键、触摸屏等底层设备千变万化,幸运的是,Linux的Input子系统对它们作了很好的统一抽象概括归纳,

这样一来,Android在HAL抽象层与Linux Input设备通信就顺理成章了,EventHub就是在抽象层担当起与Input设备通信的角色。

具体的,Linux认为所有input设备都应在 /dev/input/目录下,我们只要遍历该目录下的设备并打开它就能找到设备。

通过poll轮训机制读取设备的数据,并把数据保存到RawEvent结构体里。

4 InputReader

InputReader线程用来监听来自设备的RawEvent数据,并通过消息机制通知到InputDispatcher.

这里就要注意数据的具体处理过程了,因为按键和单点/多点触摸的数值都会在mapper里进行比较复杂的计算处理。

RawEvent数据首先保存到InputReader定义的InputDevice结构体里,经由转换器mapper的转换,最后通知InputDispatcher分发出去。



  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值