作家
登录

Android Input子系统:Input进程的创建,监听线程的启动

作者: 来源: 2017-09-12 08:47:44 阅读 我要评论

  • 将Java层的Context和InputManagerService转换为native层的Context和InputManagerService存储在mContextObj和mServiceObj中
  • 初始化变量
  • 创建EventHub
  • 创建InputManager 
  1. com_android_server_input_InputManagerService.cpp 
  2.  
  3. NativeInputManager::NativeInputManager(jobject contextObj, 
  4.         jobject serviceObj, const sp<Looper>& looper) : 
  5.         mLooper(looper), mInteractive(true) { 
  6.     JNIEnv* env = jniEnv(); 
  7.  
  8.     mContextObj = env->NewGlobalRef(contextObj); 
  9.     mServiceObj = env->NewGlobalRef(serviceObj); 
  10.  
  11.     {        AutoMutex _l(mLock); 
  12.         mLocked.systemUiVisibility = ASYSTEM_UI_VISIBILITY_STATUS_BAR_VISIBLE; 
  13.         mLocked.pointerSpeed = 0; 
  14.         mLocked.pointerGesturesEnabled = true
  15.         mLocked.showTouches = false
  16.     } 
  17.     mInteractive = true
  18.  
  19.     sp<EventHub> eventHub = new EventHub(); 
  20.     mInputManager = new InputManager(eventHub, this, this); 

EventHub

看到这里很多人就会想,EventHub是什么?取英语释义来看,它的意思是事宜枢纽。我们在文┞仿开首的时刻也提到过,Input体系的事沂攀来源竽暌冠驱动/内核,那么我们可以猜测EventHub是处理来自驱动/内核的元事宜的枢纽。接下来就在源码中验证我们的设法主意吧。

EventHub的创建过程中做了以下工作:

  • 创建mEpollFd用于监听是否稀有据(有无事宜)可读
  • 创建mINotifyFd将它注册到DEVICE_PATH(这里路径就是/dev/input)节点,并将它交给内核用于监听该设备节点的增删数据事宜。那么只要稀有据增删的事宜到来,epoll_wait()就会返回,使得EventHub能收到来自体系的通知,并获取事宜的具体信息
  • 调用epoll_ctl函数将mEpollFd和mINotifyFd注册到epoll中
  • 定义int wakeFd[2]作为事宜传输管道的读写两端,并将读端住册到epoll中让mEpollFd监听 
  1. bool InputReaderThread::threadLoop() { 
  2.     mReader->loopOnce();    return true
  3. }void InputReader::loopOnce() { 
  4.     …… 
  5.  
  6.     size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE); 
  7.  
  8.     { // acquire lock 
  9.         AutoMutex _l(mLock); 
  10.         mReaderIsAliveCondition.broadcast();        if (count) { 
  11.             processEventsLocked(mEventBuffer, count); 
  12.         } 
  13.  
  14.     ……        if (oldGeneration != mGeneration) { 

  15.   推荐阅读

      你的还是我的?谈谈云安全责任共担模型

    51CTO诚邀您9月23号和秒拍/国美/美团元专家一路聊智能CDN的优化之路,抓紧时光哦! 以前几个月,安然界见证了多起重大年夜云数据泄漏事宜。6月份1.97亿美国选平易近的泄漏事宜,震动全球。>>>详细阅读


    本文标题:Android Input子系统:Input进程的创建,监听线程的启动

    地址:http://www.17bianji.com/lsqh/37309.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)