Android核心分析(14)—— Android GWES之輸入系統

來源:互聯網
上載者:User
Android輸入系統

    依照慣例,在研究Android輸入系統之前給出輸入系統的本質描述:從哲學的觀點來看,輸入系統就是解決從哪裡來又將到哪裡去問題。輸入的本質上的工作就是收集使用者輸入資訊並放置到目標位置。

   Android在原始碼分類上,並沒有輸入系統分類。本章的輸入系統研究是一個綜合的分析,前面的GWES的分析,特別是View的Focus Path以及Window Manager Proxy是本章分析的基礎,如果沒有理解,請參閱前面的視窗管理的相關章節。

Android輸入系統的組成

輸入系統由如下幾部分組成:

  1. 1)後台視窗管理服務
  2. 2)Focus Activity
  3. 3)Focus Window
  4. 4)Focus View:用來接收鍵盤訊息

    從輸入系統這個角度去看Android的Window Manager服務解決了使用者資訊輸入收集,而FocusActvitiy,Focus Window、Focus View這些概念的設計是為瞭解決使用者輸入應該放到哪裡去這個問題。在整個Android系統中,同時只有一個一個Focus Window,而屬於該Window的Focus View才是真正的Focus View。

    在Android系統中,在設計上要求多個Actvitiy同時存在運行。在實現中,每次把Actvitiy變成Focused Actvitiy時(setFocusedActivity@ActivityManagerService.java)啟用程式的時候,就把該Activity的主視窗設定成前景視窗,即系統中的頂層視窗,AppToken概念的引進就是為瞭解決視窗對象的歸屬問題。在這個過程中,在邏輯上看,我們挑選了一個Activity作為了Focus Activity來接收系統的訊息,實質上這個Focus Activity的Focus視窗就是前景視窗。

         Focus視窗的改變將改變焦點View,前景視窗的改變也將引起焦點View的變化。焦點和游標的概念用於管理輸入裝置和輸入事件的傳送。游標是一個繪製在螢幕之上的小位元影像,指示當前的輸入位置。鍵盤輸入有類似的輸入焦點和鍵盤輸入插入符的概念。只有具有輸入焦點的視窗才能擷取鍵盤事件。改變視窗的焦點通常由特殊的按鍵組合或者TouchEvent事件完成。具有輸入焦點的視窗通常繪製有一個鍵盤插入符。該插入符的存在、形式、位置,以及該插入符的控制完全是由視窗的事件處理常式完成的。

    現在站在更宏觀的位置來看Actvitiy的輸入系統,可以從Linux Driver開始到輸入框結束的整個鏈條,我這裡給出大輸入系統的概念,Android大輸入系統包含:Linux driver, Window Manager, Message System, View Focus Path,Focus View。

Android輸入系統架構圖

現在從Android的程式碼分析的角度,來看看輸入系統的組成。這個過程從代碼中分析處理:

在Window Manager Service端

readEvent@com_android_server_KeyInputQueue.cpp

KeyQ@WindowMangerService.java

KeyInputQ@KeyInputeQueue.java

InputDispatcherThread@WindowMangerService.java

在Client端

 IWindow@ViewRoot.Java

ViewRoot@ViewRoot.java

    KeyInputQ在WindowMangerService中建立一個獨立的線程InputDeviceReader,使用Native函數readEvent來讀取Linux Driver的資料構建RawEvent,並放入到KeyQ訊息佇列中。

    InputDispatcherThread從KeyQ中讀取Events,找到Window Manager中的Focus Window,通過Focus Window記錄的mClient介面,將Events專遞到Client端。Client端在根據自己的Focus Path傳遞事件,直到事件被處理。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.