【Android】圖文解密Android InputManagerService

1、簡介

下面是Android事件派發的一個簡圖,從Hardware開始,收到事件後,Linux Kernel將其記錄到相關的/dev/input/event設備節點,接着進入EventHub,EventHub是個原始數據中心,由InputReader讀取,InputReaderPolicy負責設備相關的事件讀取策略,然後交由InputDispatcher派發,InputDispatcherPolicy負責事件派發的具體策略,如事件通知、事件攔截等,InputDispatcher通過WindowManagerService將事件派發到焦點窗口,最後派發到控件樹。InputManagerService(IMS),在Java層與WindowManagerService(WMS)通信,新建窗口時WMS將窗口和IMS聯繫起來,在Native層包括InputReader和InputDispatcher兩個線程,分別負責事件讀取和派發。本文重點介紹Java層的相關知識點。

在這裏插入圖片描述

2、結構-Native

Native層包括libinput、libinputflingerhost、inputflinger、libinputflinger幾個模塊,結構簡圖如下。

在這裏插入圖片描述

3、結構Java

Java層的結構簡圖如下。

在這裏插入圖片描述

4、啓動

IMS在SystemServer中啓動,流程如下圖。主要工作可以分爲兩部分,一是啓動Native的InputDispatcherThread和InputReaderThread,InputDispatcherThread用於事件派發,InputReaderThread用於事件讀取;二是通過InputMonitor建立IMS與WMS的聯繫。

在這裏插入圖片描述

5、事件派發

事件派發中很重要的機制是Native層的InputChannel,InputChannel用於IPC,其中InputPublisher由InputDispatcher派發事件,InputConsumer消費InputDispatcher派發的事件。下圖是Java層事件派發的簡單流程。

在這裏插入圖片描述

關於事件在控件樹中的派發流程和用法可參照:【Android】圖文解密Android View(https://blog.csdn.net/iEearth/article/details/86169732)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章