Android中按键消息的派发过程及源码分析

2014-11-24 12:05:11 · 作者: · 浏览: 2

以上过程中前三步都在WmS中完成,按键消息直接发送给当前窗口,而触摸消息则根据触摸坐标位置来匹配所有窗口,并判断坐标落到哪个窗口区域中,然后把消息发送给相应的窗口。对于按键消息还会涉及到“生理长按”的检测,比如一直按住某个键,那么会产生一些列的按键消息,然而第1个和第2个消息之间往往会间隔较长的时间,这种设计是人类本身的生理特点决定的,因为从按下到弹起的过程中,如果CPU处理太快,会导致产生多次该消息,这往往不是用户所期望的,因此Android把这种消息处理延迟加入到了消息处理前端中,应用程序不需要关心第一次的延迟,只需按普通的DOWN消息处理。


下面具体分析Android中按键消息的派发流程:


每个窗口定义了一个ViewRoot(4.0中是ViewRootImpl)对象,而ViewRoot对象中定义了一个inputHandler,窗口管理系统(WmS)派发消息的过程中会调用inputHandler的handlekey(),该函数再调用ViewRoot中的dispatchKey()函数