Android中按键消息分发机制 上

Android中的用户消息主要包括两种,按键消息和触摸消息,在这里我先分析一下按键消息的分发过程,如果分析得比较好,就继续分析一下触摸消息的分发过程,在这里我会将按键消息如何获取以及按键消息如何分发到对应窗口的过程进行分析,中间很多设计技术性的问题我就不深入,因为详细分析会使文章逻辑很混乱,不利于大家明白按键消息的分发过程,当大家从比较宏观的角度把握了按键消息的分发机制之后,自己可以通过阅读源码来了解其中的技术,我这次试用的源码是Android2.3,如果大家试用的是其他版本,难免会有些出入。


在开始之前,我先简要介绍一下Android2.2中的分发机制:

在Java层,WMS有两个类KeyQ和InputDispatchThread(名字可能写错,但是不影响我们分析),KeyQ实例化以后,会启动一个线程,不断从设备驱动中读取用户消息,然后放入到一个队列中,InputDispatchThread也会启动一个线程,不断冲队列中取出消息,并通过ViewRoot中的W对象发送给对应的窗口,最终这个消息是放在了这个应用的主线程的MessageQueue中。


在Android2.3(之后)版本中,对于这一块有很大的变动,它将按键消息的获取移到了Nativate层,并且使用了pipe机制代替了binder机制实现进程间的通信。那我们就开始学习2.3中的按键消息分发机制吧


首先我要明确的告诉你,2.3中也有两个线程,一个负责从驱动获取消息,一个负责将消息派发到相应的窗口,这两个线程是在InputManager中创建的,InputManager是在WMS启动的时候创建的,我们看看InputManager的构造函数:


public InputManager(Context context, WindowManagerService windowManagerService) {
        this.mContext = context;
        this.mW
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值