Android系统--输入系统(十三)Dispatcher线程情景分析_Reader线程传递事件 1. 输入按键 我们知道Android系统的按键分为三类:(1)Global Key;(2)System Key;(3)User Key Global Key:按下一个按键,启动某个APP. 具体使用哪个按键启动哪个APP可以自己指定,修改\frameworks\base\core\res\res\xml\Global_keys.xml,接下来有一篇博文具实现,假设它是AKEYCODE_TV Sys…
android输入系统C++最上层文件是com_android_serve_input_InputManagerService.cpp global key:按下按键,启动某个APP可以自己指定,修改frameworks\base\core\res\res\xml\Global_keys.xml假设它是AKEYCODE_TV system key:比如音量键 AKEYCODE_VOLUME_DOWN user key:其他按键,比如ABCDAKEYCODE_A reader线程把驱动上报的sca…
Android系统--输入系统(十四)Dispatcher线程情景分析_dispatch前处理 1. 回顾 我们知道Android输入系统是Reader线程通过驱动程序得到上报的输入事件,还要经过处理,才可以将输入事件发送给应用程序,现在回顾一下是具体做哪些处理. 首先Reader线程会将输入事件放入mInboundQueue队列当中,但是放入队列之前需要进行稍加处理. 1.1 处理类型 - 紧急事件,马上处理(来电振铃时,按下音量键,会马上静音) - 对输入事件添加Flag,决定输入事件是否传…
Android系统--输入系统(十七)Dispatcher线程_分发dispatch 1. 回顾 InputRead线程从输入设备当中得到输入事件 对于读到输入事件稍作处理,比如紧急事件,来电时候按下音量键便是静音,这时候是直接处理的,处理之后再把输入事件放入mInBoundQueue队列当中,接着唤醒Dispatch线程. 对于Dispatch线程也是对输入事件稍作处理之后,再给分发给应用程序 Global Key/System Key:处理之后直接丢掉 User Key:上传给应用程序:通过…
Android系统--输入系统(七)Reader_Dispatcher线程启动分析 1. Reader/Dispatcher的引入 对于输入系统来说,将会创建两个线程: Reader线程(读取事件) Dispatcher线程(分发事件) 2. Reader/Dispatcher的创建 我们知道在Android系统中,都普遍按照面向对象的思想来编写程序,对于问题,Android一般都是创建一个类去解决,在输入系统中,有两个线程,对于这两个线程,Android系统为这两个线程创建两个类,分别为Inp…
Android系统--输入系统(八)Reader线程_使用EventHub读取事件 1. Reader线程工作流程 获得事件 size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE); 简单处理 processEventsLocked(mEventBuffer, count); 将事件分发给Dispatch线程处理 mQueuedListener->flush(); 2. Reader…
Android系统--输入系统(九)Reader线程_核心类及配置文件 1. Reader线程核心类--EventHub 1.1 Reader线程核心结构体 实例化对象:mEventHub--表示多个输入设备,里面有数组mPendingEventItems存储多个设备 struct epoll_event mPendingEventItems[EPOLL_MAX_EVENTS]; mDevice--vector,用来表示记录多个输入设备 KeyedVector<int32_t, Device*>…
Android系统--输入系统(十)Reader线程_核心类及配置文件深入分析 0. 前言 个人认为该知识点阅读Android源代码会不仅容易走进死胡同,并且效果并不好,前脚看完后脚忘记,故进行总结,希望可以更好帮助大家了解,了解之后在进行阅读源代码会有事半功倍的效果. 1. 引入 由输入系统(九)实验得出 keylayout文件:只是用来表示驱动上报的scancode对应哪一个android按键(AKEYCODE_x)只是表示按键被按下. kcm文件: 用来表示android按键(AKEYCO…
Android系统--输入系统(十一)Reader线程_简单处理 1. 引入 Reader线程主要负责三件事情 获得输入事件 简单处理 上传给Dispatch线程 InputReader.cpp void InputReader::loopOnce() { ...... size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE); //获得事件 { // acquire lock Auto…
Android系统--输入系统(十二)Dispatch线程_总体框架 1. Dispatch线程框架 我们知道Dispatch线程是分发之意,那么便可以引入两个问题:1. 发什么;2. 发给谁.这两个问题便是构成Dispatch线程的主要两个部分,也是今天博文主要讨论的问题,本次只是简单介绍框架,具体介绍会在后续博文具体说明. 2. Dispatch线程分发过程 2.1 针对发什么? 首先需获得事件: (1)简单处理 进行输入事件分类(Global按键.system按键.用户按键) 处理紧急事件…