InputManagerService

Input框架

每增加一個WindowState.java,WMS都會通過registerInputChannel向InputDispatcher注冊一個connection,這個connection用于后續(xù)event查找當前的觸摸位置屬于哪一個window

event 主要通過兩種途徑返回到framework

圖片.png

1帐姻、key發(fā)往PhoneWindowManager

  • 一路通過InputMonitor(繼承于WindowManagerCallbacks)傳給PhoneWindowManager來做系統(tǒng)輸入事件的處理奶段,核心回調(diào)函數(shù)interceptKeyBeforeQueueing


    圖片.png

2、motion發(fā)往window

  • 另一方面通過InputDispatcher中的socket將這些事件傳給焦點及監(jiān)視窗口(ViewRootImpl)扛伍,然后會調(diào)用相應View的onTouchEvent词裤,核心是publishKeyEvent/publishMotionEvent
圖片.png
  • InputDispatcher會維護和WMS中所有窗口的連接,雖然一般只會往焦點窗口發(fā)事件逆航。

    ViewRootImpl中維護了pending input event的列表,用mPendingInputEventHead和mPendingInputEventTail指示拇惋,其中的元素為QueuedInputEvent類型抹剩。當consumeBatchedInputEvents調(diào)用后,會

回調(diào)enqueueInputEvent()加入event元素澳眷,然后ViewRootImpl延時或非延時在doProcessInputEvents()中讀出并處理。


圖片.png

總結(jié)

  • Input系統(tǒng)—InputReader線程:通過EventHub從/dev/input節(jié)點獲取事件衷敌,轉(zhuǎn)換成EventEntry事件加入到InputDispatcher的mInboundQueue拓瞪。

  • Input系統(tǒng)—InputDispatcher線程:從mInboundQueue隊列取出事件,轉(zhuǎn)換成DispatchEntry事件加入到connection的outboundQueue隊列面氓。再然后開始處理分發(fā)事件蛆橡,取出outbound隊列(開始像view分發(fā)事件),同時在分發(fā)開始的是否將此事件放入waitQueue中航罗,以便當view中事件處理完成回調(diào)到InputDispatcher中時粥血,能找到對應的事件。

    • 每次dispatch motion 之前都要檢查接收者的狀態(tài)复亏。如果上一個event沒有返回或者超時,則不會再次dispatch抬闷,而是等待。
  • Input系統(tǒng)—UI線程:創(chuàng)建socket pair笤成,分別位于”InputDispatcher”線程和focused窗口所在進程的UI主線程,可相互通信纵诞。

    • UI主線程:通過setFdEvents()培遵, 監(jiān)聽socket客戶端,收到消息后回調(diào)NativeInputEventReceiver();

    • “InputDispatcher”線程: 通過IMS.registerInputChannel()嗡呼,監(jiān)聽socket服務端皇耗,收到消息后回調(diào)handleReceiveCallback;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市女轿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌傅寡,老刑警劉巖北救,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異托启,居然都是意外死亡攘宙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門疗绣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铺韧,“玉大人,你說我怎么就攤上這事塔逃。” “怎么了患雏?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵淹仑,是天一觀的道長。 經(jīng)常有香客問我匀借,道長,這世上最難降的妖魔是什么凳怨? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任是鬼,我火速辦了婚禮,結(jié)果婚禮上李剖,老公的妹妹穿的比我還像新娘囤耳。我一直安慰自己,他們只是感情好充择,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布椎麦。 她就那樣靜靜地躺著,像睡著了一般观挎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凤类,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天普气,我揣著相機與錄音,去河邊找鬼夷磕。 笑死,一個胖子當著我的面吹牛坐桩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膘螟,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼碾局,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了内斯?” 一聲冷哼從身側(cè)響起像啼,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎真朗,沒想到半個月后甚颂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秀菱,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年赶么,在試婚紗的時候發(fā)現(xiàn)自己被綠了脊串。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡放闺,死狀恐怖缕坎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匾寝,我是刑警寧澤搬葬,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布急凰,位于F島的核電站猜年,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏码倦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一勿璃、第九天 我趴在偏房一處隱蔽的房頂上張望推汽。 院中可真熱鬧,春花似錦莲组、人聲如沸暖夭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咬清,卻和暖如春奴潘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背画髓。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工奈虾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肆汹,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓昂勉,卻偏偏與公主長得像扫腺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子攒至,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容