分享

android从输入事件上报概况(一)

 quandsu 2018-03-02
android输入事件上报概况

       android怎么获取输入事件?输入事件怎么派发到对应的窗口上?

1、android input设计思想

     

      驱动侦听到用户在不同设备上的input事件,将事件输出到文件中,android通过监听这些文件来得知事件的上报,然后派发给对应的view。以下是手机系统中的事件输出文件,每个文件代表一种或者多种事件类型。

  1. add device 1: /dev/input/event0  
  2.   name:     "lsm303dlhc_acc"   
  3. add device 2: /dev/input/event1  
  4.   name:     "lsm303dlhc_mag"   
  5. add device 3: /dev/input/event5  
  6.   name:     "7k_handset"      
  7. add device 4: /dev/input/event4  
  8.   name:     "7x27a_kp"      
  9. add device 5: /dev/input/event3  
  10.   name:     "ft5x0x_ts"      
  11. add device 6: /dev/input/event2  
  12.   name:     "tmd2771x"    

lsm303dlhc_acc: msensor

lsm303dlhc_mag:gsensor

7k_handset:耳机插拔事件

7x27a_kp:keypad 主要是一些物理按键的事件,音量加减键等

ft5x0x_ts:tp,这里包含虚拟按键、屏幕的touch事件等

tmd2771x:psensor 和lsensor

2、功能分析

    对应的设备驱动监听到事件的改变就会将对应的事件写入到上述的文件中,android 监听到这些文件有变化就读取当前的事件,然后派发。

   android framework有两个线程负责读取和派发,它们是在初始化wms时启动的,然后一直运行,其中InputReaderThread负责读取设备文件中的事件,InputDispatcherThread线程负责派发获取到的事件。

    派发事件,对于key来说会在wms中进行预处理,然后才会派发到对应的窗口上,touch事件会直接派发到对应的窗口上,android是怎么派发到客户窗口的呢?在android 2.3以后采用管道的方式,以前的版本采用binder通信。客户窗口事先会注册好管道,在客户进程通过读取管道中事件,然后进行窗口内部的派发。

3、总结

   对于android每块的处理会在后面的文章中进行分别解析。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多