Android input处理机制(三)InputDispatcher

26 篇文章 1 订阅
8 篇文章 0 订阅

1.回顾

通过前两篇总结Android input处理机制(一)InputReaderAndroid input处理机制(二)改键机制,我们大致了解了InputReader和EventHub处理机制,EventHub负责处理设备与事件相关问题。InputReader通过使用EventHub循环获取事件,当没有事件发生时InputReaderThread会休眠。

2.InputDispatcher的责任

2.1与InputReader深度配合,完成事件的分发

2.2能够妥善处理好,焦点与窗口相关问题,InputChannel,InputPublisher,Connection

3.InputDispatcher流程

3.1InputReader线程

当InputReader调用InputDispatcher::notifyKey,生成KeyEvent并包装成KeyEntry将其加入到InputDispatcher,Entry队列中并会唤醒InputDispatcher线程。

3.2InputDispatcher线程

diapatchOnce-> dispatchOnceInnerLocked->dispatchKeyLocked->(findFocusedWindowTargetLocked,dispatchEventLocked)-> prepareDispatchCyCleLocked->enqueueDispatchEntriesLocked->enqueueDispatchEntry->startDispatchCycleLocked

其中,enqueueDispatchEntry会把entry队列中的eventEntry封装成dispatchEntry

InputDispatchThread会循环调用dispatchOnce方法

// Wait for callback or timeout or wake.  
    nsecs_t currentTime = now();
    int timeoutMillis = toMillisecondTimeoutDelay(currentTime, nextWakeupTime);
    mLooper->pollOnce(timeoutMillis);
通过mLooper->pollOnce休眠,直到InputReader调用notifyKey,或是其它线程InputDispatcher::injectInputEvent等将其唤醒。

后续内容

 此为InputDispatcher一个内部类,处理相关InputChannel和InputPublisher相关内容。

InputChannel和InputPublisher会在后边继续学习

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值