<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Android輸入系統 依照慣例,在研究Android輸入系統之前給出輸入系統的本質描述:從哲學的觀點來看,輸入系統就是解決從哪里來又將到哪里去問題。輸入的本質上的工作就是收集用戶輸入信息并放置到目標位置。 Android在源代碼分類上,并沒有輸入系統分類。本章的輸入系統研究是一個綜合的分析,前面的GWES的分析,特別是View的Focus Path以及Window Manager Proxy是本章分析的基礎,如果沒有理解,請參閱前面的窗口管理的相關章節。 Android輸入系統的組成 [![InputSystem](https://box.kancloud.cn/2016-05-05_572b1a1d0f6ee.gif "InputSystem")](http://hi.csdn.net/attachment/201005/5/0_1273072198B9oO.gif) 輸入系統由如下幾部分組成: 1. 1)后臺窗口管理服務 1. 2)Focus Activity 1. 3)Focus Window 1. 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輸入系統架構圖 [![InputSystemALL](https://box.kancloud.cn/2016-05-05_572b1a1d1fd32.gif "InputSystemALL")](http://hi.csdn.net/attachment/201005/5/0_12730722030o6j.gif) 現在從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傳遞事件,直到事件被處理。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看