目录前言一、EventHub的getEvents()二、InputReader的processEventsLocked()前言 Android系统的输入事件是由InputManage
Android
系统的输入事件是由InputManagerService
服务来监控的,该系统服务在SystemServer
的startOtherServices()
中初始化。初始化的过程中会在Native
层创建InputReaderThread
和InputDispatcherThread
两个线程,InputReaderThread
的主要工作是读取输入事件,然后将输入事件传递给InputDispatcherThread
,最后由InputDispatcher
将输入事件分发到应用层。从源码的角度来看,InputReaderThread
线程中,会循环执行threadLoop()
方法,该方法又会调用InputReader的loopOnce()
方法,而loopOnce()
方法则主要做了三件事,可描述为图所示的流程:
EventHub的getEvents()
方法获取输入事件;processEventsLocked()
方法来处理输入事件;MQueuedListener
的flush()
方法将输入事件发送到InputDispatcher
。下面分别介绍这几个过程。
该方法实现逻辑可简述成图所示的流程:
如果是第一次调用该方法的话,则需要先扫描/dev/input目录下的输入设备;接着用mPendingEventItems保存待处理的输入事件;随后判断是否有输入事件需要处理,有则立即返回;否则通过epoll_wait等待输入事件到来。
当获取到输入事件之后,就会调用processEventsLocked()方法来处理:
对输入事件的处理是由processEventsForDeviceLocked()方法来完成的,以按键事件为例,下图是处理过程的时序图。
到此这篇关于Android Framework层获取及处理按键事件流程的文章就介绍到这了,更多相关Android Framework 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Android Framework层获取及处理按键事件流程
本文链接: https://www.lsjlt.com/news/166448.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0