android系统按键从linux到java流程(4)
所以KeyboardInputMapper的成员mContext等价于InputReader的mContext;getListener等价于调用InputReader的mContext->getListener即mQueuedListener。 5)InputReaderThread线程类
构造函数InputReaderThread使用InputReader 类对象作为参数,赋值给变量mReader。
threadLoop方法中调用mReader->loopOnce();
只要创建了InputReader实例,并以此启动InputReaderThread线程,就会反复mEventHub->getEvents读键和调用processEventsLocked分发上报。
3.2.2\\frameworks\\base\\services\\input\\InputDispatcher.cpp
该文件是真正的按键数据上报的起点,InputReader中的listener实际就是这个InputDispatcher,该类继承自接口InputDispatcherInterface。 完成3个事情:
interceptKeyBeforeQueueing,按键入列前的截获处理
interceptKeyBeforeDispatching,按键从队列分发上层app前的截获处理 startDispatchCycleLocked,完成按键最终分发上报 1)InputDispatcher类
a)构造函数以参数policy直接初始化成员变量mpolicy。
b) notifyKey函数被之前的inputreader调用,notifyKey调用interceptKeyBeforeQueueing
进行第一次按键上报,供上层截获按键,在按键被压入队列前进行必要的处理,如设置,桌面等在keyfuntion.xml中配置的快捷键,或待机键等的处理。
到这里完成按键进入Queue队列前的上报处理,如果interceptKeyBeforeQueueing没有处理这个按键,将会继续调用步骤c)。
c) enqueueInboundEventLocked将按键结构参数entry压入队列
d) InputDispatcherThread线程类不断循环,检测到队列中的按键 InputDispatcherThread调用InputDispatcher的dispatchOnce。
e) dispatchOnce调用dispatchOnceInnerLocked
f) dispatchOnceInnerLocked调用dispatchKeyLocked
g) dispatchKeyLocked调用
doInterceptKeyBeforeDispatchingLockedInterruptible
h) doInterceptKeyBeforeDispatchingLockedInterruptible调用 mPolicy->interceptKeyBeforeDispatching
到这里完成进入队列的按键在上报app前的截获处理,比如特殊处理home键,添加工装菜单的按键调用等,如果这些按键仍然没被截获,将继续进行分发,继续下面的步骤i). i) dispatchKeyLocked调用addMonitoringTargetsLocked,获取所有上层注册过需要按键的channel,创建目标通道集合inputTargets; 继续调用dispatchEventLocked开始按键分发。
j) dispatchEventLocked对每一个通道获取其connection,再调用prepareDispatchCycleLocked
k) prepareDispatchCycleLocked调用enqueueDispatchEntriesLocked l) enqueueDispatchEntriesLocked调用enqueueDispatchEntryLocked把按键eventEntry和目标通道inputTarget写入connection 再调用startDispatchCycleLocked开始分发
m) startDispatchCycleLocked调用connection->inputPublisher.publishKeyEvent完成最终分发按键。
2)InputDispatcherThread线程类
构造函数InputDispatcherThread使用InputDispatcherInterface类对象作为参数,赋值给变量mDispatcher。
threadLoop方法中调用mDispatcher->dispatchOnce();
只要创建了mDispatcher实例,并以此启动InputReaderThread线程,就会反复mDispatcher->dispatchOnce(),完成按键分发。
3.2.3\\ frameworks\\base\\services\\input\\InputManager.cpp
该文件负责启动前面阐述的InputReader和InputDispatcher。
1)创建InputReader和InputDispatcher实例,初始化到mDispatcher和mReader。
2)创建InputReaderThread和InputDispatcherThread两个线程
3)启动线程循环运行start
3.2.4 \\frameworks\\base\\services\\jni\\
com_android_server_input_InputManagerService.cpp (InputManagerService.java的JNI)
1)nativeInit()调用NativeInputManager(),后者调用new
InputManager(eventHub, this, this);完成创建InputManager对象的实例mInputManager。
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
NativeInputManager 是多重继承,其父类之一为虚类自己;
InputDispatcherPolicyInterface,所以最后一个this参数实际就是NativeInputManager InputManager运行InputDispatcher,后者调用的interceptKeyBeforeQueueing和
interceptKeyBeforeDispatching 实际就是NativeInputManager的同名函数。
也就是说从JNI初始化InputManager,启动InputReader和InputDispatcher,而InputDispatcher最终回调JNI的interceptKeyBeforeQueueing和
interceptKeyBeforeDispatching完成按键截获处理。
2)nativeStart调用mInputManager的start启动两个线程InputReaderThread
和InputDispatcherThread.
…… 此处隐藏:1288字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




