frameworks/base/libs/ui/EventHub.cpp
按电源键后,系统把scanCode写入对应的设备接点,frameworks/base/libs/ui/EventHub.cpp去读这个设备结点,并把scanCode通过.kl文件对应成keyCode发送到上层

framework/base/services/java/com/android/server/KeyInputQueue.java通过jni调用framework/base/services/jni/com_android_server_KeyInputQueue.cpp调用EventHub.cpp里的文件。

KeyInputQueue.java进入死循环先执行readEvent,调用EventHub.cpp中的getEvent等待输入。

EventHub.cpp中的getEvent进入死循环,执行pollres = poll(mFDs, mFDCount, -1)等待设备结点处有数据写入(也就是有键按下),当有数据写入时执行下面的for循环,找出是那个fd中有内容写入,并读出写入的数据res = read(mFDs[i].fd, &iev, sizeof(iev))。这里只读出了TYPE和Scancode(),而不会有Keycode,硬件层只能向设备文件写入Scancode,而Keycode是上层要用的,由map得到。接下来接用err = mDevices[i]->layoutMap->map(iev.code, outKeycode, outFlags)map出Scancode对应的Keycode和Flags。mpa是在中实现的,是在m_keys中根据scanCode找到这两个值。而m_keys是在KeyLayoutMap.cpp这个文件中load时,读取kl(一般在手机的/system/usr/keylayout文件夹下)文件,解析出所有的scanCode对应的keyCode和flag来并加到m_keys中得到的。kl文件中的类似宏的字符如POWER是在frameworks/base/include/ui/KeycodeLabels.h中对应出来的。

WindowManagerService.java文件,我们找 到WindowManagerService的构造函数,(至于WindowManagerService这个类在android整个系统中的作用将是我 接下来需要研究的内容,在这里先不做研究)
private WindowManagerService(Context context, PowerManagerService pm,
boolean haveInputMethods) {

...........................
..........................

mQueue = new KeyQ();

mInputThread = new InputDispatcherThread();

........................................
.......................................

mInputThread.start();

// Add ourself to the Watchdog monitors.
Watchdog.getInstance().addMonitor(this);
}

发现在这个构造函数里将新起一个线程。看取的名字就应该能猜出是用来获取用户输入的。KeyQ我们可以看到是派生自KeyInputQueue类的,继续 打开KeyInputQueue查看,可以看到在构造函数中同样起了一个线程,而且这个线程是一个死循环,它会在这么一个循环中不停的调用 readEvent()这么一个函数.

更多相关文章

  1. android 6.0后usb otg设备不显示在文件管理器中
  2. 将Activity打包成jar文件
  3. [置顶] Android设备adb授权的原理
  4. Android子线程真的不能更新UI么
  5. [Android]Thread线程入门1
  6. Android学习笔记(六)-文件操作与SDCard读写访问

随机推荐

  1. Android方法数超出限定的问题(multiDex,ju
  2. windows下搭建android NDK环境
  3. ProgressBar进度条
  4. 利用android studio制作简易的计算器
  5. Android(安卓)context(Application/Activi
  6. 屏幕切换时Activity重启问题
  7. Android设置透明、半透明等效果
  8. 【Android开源项目分析】android轻量级开
  9. Android(安卓)程序员指南 PDF下载
  10. Android(安卓)7.0新特性