最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?Framework層獲取及處理按鍵事件流程

 更新時間:2022年08月31日 10:30:09   作者:內(nèi)核筆記???????  
本文主要介紹了Android?Framework層獲取及處理按鍵事件流程,Android系統(tǒng)的輸入事件是InputManagerService服務(wù)來監(jiān)控的,該系統(tǒng)服務(wù)在SystemServer的startOtherServices()中初始化,更多介紹需要的小伙伴可以參考一下

前言

Android系統(tǒng)的輸入事件是由InputManagerService服務(wù)來監(jiān)控的,該系統(tǒng)服務(wù)在SystemServerstartOtherServices()中初始化。初始化的過程中會在Native層創(chuàng)建InputReaderThreadInputDispatcherThread兩個線程,InputReaderThread的主要工作是讀取輸入事件,然后將輸入事件傳遞給InputDispatcherThread,最后由InputDispatcher將輸入事件分發(fā)到應(yīng)用層。從源碼的角度來看,InputReaderThread線程中,會循環(huán)執(zhí)行threadLoop()方法,該方法又會調(diào)用InputReader的loopOnce()方法,而loopOnce()方法則主要做了三件事,可描述為圖所示的流程:

  • 通過EventHub的getEvents()方法獲取輸入事件;
  • 調(diào)用processEventsLocked()方法來處理輸入事件;
  • 通過mQueuedListenerflush()方法將輸入事件發(fā)送到InputDispatcher

下面分別介紹這幾個過程。

一、EventHub的getEvents()

該方法實現(xiàn)邏輯可簡述成圖所示的流程: 

如果是第一次調(diào)用該方法的話,則需要先掃描/dev/input目錄下的輸入設(shè)備;接著用mPendingEventItems保存待處理的輸入事件;隨后判斷是否有輸入事件需要處理,有則立即返回;否則通過epoll_wait等待輸入事件到來。

二、InputReader的processEventsLocked()

當(dāng)獲取到輸入事件之后,就會調(diào)用processEventsLocked()方法來處理:

對輸入事件的處理是由processEventsForDeviceLocked()方法來完成的,以按鍵事件為例,下圖是處理過程的時序圖。 

  • 在processEventsForDeviceLocked()方法里,首先獲取設(shè)備索引,然后根據(jù)設(shè)備索引獲取設(shè)備,最后調(diào)用InputDevice的process()方法來處理。
  • 在process()方法里,遍歷處理所有輸入事件,并循環(huán)調(diào)用所有mapper來處理每一個輸入事件。按鍵事件中,KeyboardInputMapper的process()方法首先會判斷掃描碼是不是鍵盤碼,如果是,就調(diào)用processKey()方法處理。
  • 在processKey()方法中,首先根據(jù)掃描碼獲取到對應(yīng)的keyCode方法,然后構(gòu)建NotifyKeyArgs對象,最后調(diào)用QueuedInputListener的notifyKey()方法通知key事件。notifyKey()方法首先按對鍵事件進行檢查、驗證;其次處理特殊按鍵;然后把按鍵放到InboundQueue隊列,最后調(diào)用Looper的wake方法向管道中寫入字符,喚醒InputDispatcherThread。

到此這篇關(guān)于Android Framework層獲取及處理按鍵事件流程的文章就介紹到這了,更多相關(guān)Android Framework 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

丰镇市| 临泉县| 辽宁省| 榕江县| 重庆市| 锦州市| 达拉特旗| 南陵县| 昭通市| 富蕴县| 门源| 彭阳县| 建平县| 中阳县| 油尖旺区| 平塘县| 福安市| 铁力市| 景宁| 开远市| 喜德县| 黎川县| 齐齐哈尔市| 城市| 平昌县| 上虞市| 和顺县| 绥宁县| 玉山县| 古浪县| 梧州市| 宣武区| 广丰县| 盘山县| 汕头市| 东乡| 高淳县| 石渠县| 藁城市| 岳西县| 柘城县|