當前位置:
首頁 > 知識 > Android系統——輸入系統(十七)Dispatcher線程 分發dispatch

Android系統——輸入系統(十七)Dispatcher線程 分發dispatch

Android系統--輸入系統(十七)Dispatcher線程_分發dispatch1. 回顧

  • InputRead線程從輸入設備當中得到輸入事件

  • 對於讀到輸入事件稍作處理,比如緊急事件,來電時候按下音量鍵便是靜音,這時候是直接處理的,處理之後再把輸入事件放入mInBoundQueue隊列當中,接著喚醒Dispatch線程。

  • 對於Dispatch線程也是對輸入事件稍作處理之後,再給分發給應用程序

    • Global Key/System Key:處理之後直接丟掉
    • User Key:上傳給應用程序:通過查找目標APP得到對應connection,再把輸入事件放入某個outBoundQueue隊列中,應用程序將其取出處理。

2. 分發dispatch事件概述

在上一篇博文分析到在Dispatch線程當中有一個Vector容器(mConnectionByFd),裡面有多個connection,這些connection對應著一個個應用程序connection含有InputChannel(含有fd),應用程序也含有對應fd,fd通過socketpair機製得到。Dispatch線程找到對應的connection之後,便可以將輸入事件寫入InputChannel中的fd中,應用程序通過socketpair機制馬上便可以獲得fd。

3. 分發Dispatch過程
  • 查找目標

    • 向WindowManagerService查詢當前窗口
    • 獲得對應的connection
  • 把輸入事件放入connection某個隊列outBoundQueue中

  • 從隊列中取出,構造為InputMessage類型,逐個將輸入事件寫入fd中

4. 分發事件具體調用時序圖

Android系統——輸入系統(十七)Dispatcher線程 分發dispatch

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

原創EntityFramework Core 中使用 CodeFirst 模式時 PowerShell 版本問題及解決
electron 使用 node-ffi 調用 C++ 動態鏈接庫(DLL)
HDU 5527---Too Rich(貪心+搜索)
面向對象,局部變數和成員變數

TAG:達人科技 |

您可能感興趣

Surface Phone蹤跡再現:運行Andromeda系統
雷神911最新的6代機重裝系統提示no bootable device.systemstop修改bios教程
可媲美Lighthouse,Occipital推高精度Inside-Out追蹤系統
Facebook透露內部Fabric Aggregator分散式網路系統設計
Nokia 7+曝光採用Android One系統
Win7系統提示steam client not found解決方法
Full Throttle購置Funktion One Vero系統
The Nervous System 神經系統
格里芬導彈系統 Griffin Missile System
Verizon和Sprint正式向三星note8推送Android8.0系統升級
小米Pro/Air筆記本重裝系統教程及開機No Bootable Devices解決方案
Prometheus+Grafana實現監控系統
kali linu滲透系統.md
Google Android Wear智能手錶操作系統更名為Wear OS by Google
華碩ZenFone Live L1發布:預裝Android Go系統
多區塊鏈證明系統——Telegram Open Network
Windows系統的JScript組件被曝存在一個0day RCE
Google推出平板電腦Chromebook Tab 10,搭載Chrome OS系統
任天堂 Switch 遭 fail0verflow 黑客組織破解,已可運行 Linux 系統
Google Pixel 3曝光 或將運行Android 9.0系統