android從輸入事件上報概況(一)

來源:互聯網
上載者:User
android輸入事件上報概況

       android怎麼擷取輸入事件?輸入事件怎麼派發到對應的視窗上?

1、android input設計思想     

      驅動偵聽到使用者在不同裝置上的input事件,將事件輸出到檔案中,android通過監聽這些檔案來得知事件的上報,然後派發給對應的view。以下是手機系統中的事件輸出檔案,每個檔案代表一種或者多種事件類型。

add device 1: /dev/input/event0  name:     "lsm303dlhc_acc" add device 2: /dev/input/event1  name:     "lsm303dlhc_mag" add device 3: /dev/input/event5  name:     "7k_handset"    add device 4: /dev/input/event4  name:     "7x27a_kp"    add device 5: /dev/input/event3  name:     "ft5x0x_ts"    add device 6: /dev/input/event2  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每塊的處理會在後面的文章中進行分別解析。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.