写了这么多年软件,键盘就几十块钱一个,最近工作需要研究下android的键盘子系统,发现一个破键盘的驱动也够复杂啊,很多细节网上也找不的答案,自己一行一行的看,把网上没写清楚的加深一点奉献给大家:
dispatchOnce函数的前两个值:
nsecs_t keyRepeatTimeout = mPolicy->getKeyRepeatTimeout(); //检测是否是长按的超时时间
nsecs_t keyRepeatDelay = mPolicy->getKeyRepeatDelay();//重复发送长按事件的delay时间
函数里面的nextWakeupTime是用来标识下次唤醒的时间,由函数dispatchOnceInnerLocked(keyRepeatTimeout, keyRepeatDelay, & nextWakeupTime);计算出来。
收到键盘事件不马上处理,先放到mPendingEvent里面,加入策略处理函数,然后马上再次调度线程处理,
01-01 01:01:00.822 2404 2735 D InputDispatcher: tony.log: Is mPendingEvent NULL:0llx
01-01 01:01:00.822 2404 2735 D InputDispatcher: tony.log: get into retirving queue branch
01-01 01:01:00.822 2404 2735 D InputDispatcher: tony.log: dispatchEvent TYPE_KEY(2), queueSize: 0
01-01 01:01:00.822 2404 2735 D InputDispatche