APP对fd/InputChannel的注册过程:

new WindowInputEventReceiver extends InputEventReceiver//InputEventReceiver类的dispatchInputEvent函数会调用onInputEvent

  onInputEvent函数在收到事件后被调用//被父类的dispatchInputEvent调用

在InputEventReceiver的构造函数中调用nativeInit

nativeInit//从java进入C++

  new NativeInputEventReceiver

    consumeEvents//调用Java层的函数dispatchInputEvent

      dispatchInputEvent

最后会把fd加入epoll去监控

APP获得并处理输入事件流程

pollOnce

 polInner

  epoll_wait//等待各种事件的发生

  pushResponse(events,mRequests.valueAt(requestIndex))构造response放入某个缓冲区

  Response& response = mResponses.editItemAt(i)//从缓冲取出response

  int callbackResult = response.request.callback->handleEvent(fd,events,data)

   consumeEvents(env,false,-1,NULL)

    mInputConsumer.consume(...,&seq,&inputEvent)

     mChannel->receiveMessage(&mMsg)

      nRead = ::recv(mFD,msg,sizeof(InputMessage),MSG_DONTWAIT)

     initializeKeyEvent(keyEvent,&mMsg)

     *outSeq = mMsg.body.key.seq

     *outEvent = keyEvent 

    inputEventObj = android_view_KeyEvent_fromNative(env,static_cast<KeyEvent*>(inputEvent))

    env->CallVoidMethod(receiverObj.get(),gInputEventReceivrrClassInfo.dispatchInputEvent,seq,inputEventObj)

     onInputEvent(event)

      enqueueInputEvent(event,this,0,true)

       mPendingInputEventTail =q

       doProcessInputEvents//处理众多的输入事件

        QueueInputEvent q = mPendingInputEventHead;

        mPendingInputEventHead = q.mNext

        deliverInputEvent(q)

         stage = q.shouldSkipIme()?mFirstPostImeInputStage:mFirstInputStage;//如果应用程序使用输入法,就从mFirstInputStage开始处理,如果不使用输入法,就从mFirstPostImeInputStage开始处理

         stage.deliver(q)

InputStage stage的分析见下图   

如果应用程序使用输入法,就从mFirstInputStage开始处理,如果不使用输入法,就从mFirstPostImeInputStage开始处理

  

10.10 android输入系统_APP获得并处理输入事件流程的更多相关文章

  1. 10.9 android输入系统_APP跟输入系统建立联系和Dispatcher线程_分发dispatch

    12. 输入系统_APP跟输入系统建立联系_InputChannel和Connection核心: socketpair // 第9课第3节_输入系统_必备Linux编程知识_任意进程双向通信(scok ...

  2. 10.1、android输入系统_必备Linux编程知识_inotify和epoll

    1. inotify和epoll 怎么监测键盘接入与拔出? (1)hotplug机制:内核发现键盘接入/拔出==>启动hotplug进程==>发消息给输入系统 (2)inotify机制:输 ...

  3. Android系统--输入系统(五)输入系统框架

    Android系统--输入系统(五)输入系统框架 1. Android设备使用场景: 假设一个Android平板,APP功能.系统功能(开机关机.调节音量).外接设备功能(键盘.触摸屏.USB外接键盘 ...

  4. Android系统--输入系统(一)必备的Linux知识_inotify和epoll

    Android系统--输入系统(一)必备的Linux知识_inotify和epoll 引入 1. 笔记本电脑插入外接键盘,两个键盘都可以使用 a. 键盘即插即用--如何检测键盘的接入和拔出 hotpl ...

  5. 《深入理解Android 卷III》第五章 深入理解Android输入系统

    <深入理解Android 卷III>即将公布.作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白.即Android Framework中和UI相关的部分. ...

  6. 10.7 android输入系统_Dispatcher线程情景分析_Reader线程传递事件和dispatch前处理

    android输入系统C++最上层文件是com_android_serve_input_InputManagerService.cpp global key:按下按键,启动某个APP可以自己指定,修改 ...

  7. 10.12 android输入系统_InputStage理论

    android应用程序对输入系统的处理分为多个阶段,我们把这些阶段称为InputStage 理论处理流程: (1)activity发给window,如果window不能处理,再由activity处理; ...

  8. 10.11 android输入系统_补充知识_activity_window_decor_view关系

    android里:1个application, 有1个或多个activity(比如支付宝有:首页.财富.口碑.朋友.我的,这些就是activity)1个activity, 有1个window(每个ac ...

  9. 10.6 android输入系统_Dispatcher线程_总体框架

    图解Android - Android GUI 系统 (5) - Android的Event Input System - 漫天尘沙 - 博客园.htm // 关注里面的Dispatcher处理流程h ...

随机推荐

  1. SpringBoot与Dubbo的整合-zookeeper和监控中心搭建

    对于Dubbo的应用已经是十分普遍,自从阿里巴巴开源以来,国内许多公司就采用了dubbo的架构来开发项目.不过再dubbo十分火的时候,突然就停止更新了, 只有当当网还在其基础进行了拓展(dubbox ...

  2. 42.cnpm不是内部命令的解决方案:配置环境变量

    转自:https://blog.csdn.net/u014540814/article/details/78777961

  3. 3.cocos代码入口

    模拟代码进入过程: main.cpp #include <iostream> #include "AppDelegate.h" #include "CCApp ...

  4. OpenCV —— 写入AVI视频文件

    打开视频文件,对每一帧进行极坐标变换,然后将转换生成的图像序列写入视频文件中 #include "cv.h" #include "highgui.h" int ...

  5. hdp spark beeline

    thriftserver端口号10016 hdp所用端口号由10000改为10016 !connect jdbc:hive2://localhost:10016

  6. BZOJ3994: [SDOI2015]约数个数和(莫比乌斯反演)

    Description  设d(x)为x的约数个数,给定N.M,求     Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Out ...

  7. Java证书通信

    一.概念介绍:   加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击.其重点在于数据的安全性.身份认证是用来判断某个身份的真实性 ...

  8. hive load文件第一个字段为NULL

    在hive中,通常须要载入外部数据源.load文件时.第一个字段会出现NULL. 比如: 1.运行load语句: LOAD DATA LOCAL INPATH 'test.txt' OVERWRITE ...

  9. [Redux-Observable && Unit Testing] Use tests to verify updates to the Redux store (rxjs scheduler)

    In certain situations, you care more about the final state of the redux store than you do about the ...

  10. virmon防火墙64位正式版(暂定)公布

    ChangeLog: 2015-06-2564位版本号签名问题临时得到解决.还要致谢一下某位黑客. 支持版本号x64 Windows Vista.7.8.8.1以上等.个人仅仅在Windows7上做了 ...