10.10 android输入系统_APP获得并处理输入事件流程

Posted 拉风摊主

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.10 android输入系统_APP获得并处理输入事件流程相关的知识,希望对你有一定的参考价值。

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获得并处理输入事件流程的主要内容,如果未能解决你的问题,请参考以下文章

JVM 从哪里获得 ubuntu 10.10 中的语言环境设置?

Android设计画面中有EditText时取消启动时自动获得焦点调用系统输入法的方法

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

Android 模拟器上的音频输入

10.6-10.10 监控iofree命令ps命令查看网络状态和抓包

ubuntu10.10输入了正确的用户名密码但是无法登录