<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                Android應用程序是由Activity、Service、Broadcast Receiver和Content Provider四種類型的組件構成的,它們有可能運行在同一個進程中,也有可能運行在不同的進程中。此外,各種系統組件也運行在獨立的進程中,例如,Activity管理服務ActivityManagerService和Package管理服務PackageManagerService都運行在系統進程System中。那么,這些運行在不同進程中的應用程序組件和系統組件是如何通信的呢? 我們知道,Android系統是基于Linux內核開發的。Linux內核提供了豐富的進程間通信機制,如管道(Pipe)、信號(Signal)、消息隊列(Message)、共享內存(Share Memory)和插口(Socket)等。然而,Android系統并沒有采用這些傳統的進程間通信機制,而是開發了一套新的進程間通信機制——Binder。與傳統的進程間通信機制相比,Binder進程間通信機制在進程間傳輸數據時,只需要執行一次拷貝操作,因此,它不僅提高了效率,而且節省了內存空間1。 Binder進程間通信機制是在OpenBinder的基礎上實現的2,它采用CS通信方式,其中,提供服務的進程稱為Server進程,而訪問服務的進程稱為Client進程。同一個Server進程可以同時運行多個組件來向Client進程提供服務,這些組件稱為Service組件3。同時,同一個Client進程也可以同時向多個Service組件請求服務,每一個請求都對應有一個Client組件,或者稱為Service代理對象。Binder進程間通信機制的每一個Server進程和Client進程都維護一個Binder線程池來處理進程間的通信請求,因此,Server進程和Client進程可以并發地提供和訪問服務。Server進程和Client進程的通信要依靠運行在內核空間的Binder驅動程序來進行。Binder驅動程序向用戶空間暴露了一個設備文件/dev/binder,使得應用程序進程可以間接地通過它來建立通信通道。Service組件在啟動時,會將自己注冊到一個Service Manager組件中,以便Client組件可以通過Service Manager組件找到它。因此,我們將Service Manager組件稱為Binder進程間通信機制的上下文管理者,同時由于它也需要與普通的Server進程和Client進程通信,我們也將它看作是一個Service組件,只不過它是一個特殊的Service組件。 以上描述的Binder進程間通信機制中涉及了Client、Service、Service Manager和Binder驅動程序四個角色,它們的關系如圖5-1所示。 ![Binder進程間通信機制](https://box.kancloud.cn/7f468ce59812ace3c121bb2ab116f476_787x464.jpg =787x464) 從圖5-1可以看出,Client、Service和Service Manager運行在用戶空間,而Binder驅動程序運行在內核空間,其中,Service Manager和Binder驅動程序由系統負責提供,而Client和Service組件由應用程序來實現。Client、Service和Service Manager均是通過系統調用open、mmap和ioctl來訪問設備文件/dev/binder,從而實現與Binder驅動程序的交互,而交互的目的就是為了能夠間接地執行進程間通信。 在本章內容中,我們首先分析Binder驅動程序的基礎知識,然后介紹它在用戶空間中的一個Binder進程間通信庫。了解了這些知識點之后,再通過一個實例說明應用程序進程是如何使用Binder進程間通信庫來通信的。接著我們再繼續進一步分析Binder驅動程序的實現原理,包括Binder對象的引用計數技術和死亡通知機制。 在Android系統中,Binder進程間通信機制的使用是相當廣泛的,因此,掌握Binder進程間通信機制,對理解整個Android系統的實現是有非常大的幫助的。為了進一步加深對Binder進程間通信機制的理解,我們分析了Binder進程間通信機制的四個使用情景,分別是: (1)Service Manager的啟動過程。 (2)Service Manager代理對象的獲取過程。 (3)Service組件的啟動過程。 (4)Service代理對象的獲取過程。 上述四個使用情景都是基于Binder進程間通信機制的C/C++實現來分析的。由于Android應用程序是使用Java語言開發的,因此,在本章的最后一節中,我們將詳細介紹Binder進程間通信機制的Java調用接口。 > 注: > 1. 使用共享內存在進程間傳輸數據,雖然也只需要執行一次拷貝操作,但是它一般要結合其他的進程間通信機制來同步信息。 > 2. OpenBinder是一種進程間通信機制,它最初是由Be公司開發的,后來由Palm公司接手開發和維護,最后Google對其進行改造,并且應用在Android系統中,具體可以參考http://en.wikipedia.org/wiki/OpenBinder。 > 3. 注意:Binder進程間通信機制中的Service組件與Android應用程序中的Service組件是兩個不同的概念,在后面的第8章中,我們再詳細分析Android應用程序組件Service的實現原理。
                  <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>

                              哎呀哎呀视频在线观看