<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進程間通信(IPC)機制Binder簡要介紹和學習計劃](http://blog.csdn.net/luoshengyang/article/details/6618363) 在Android系統中,每一個應用程序都是由一些Activity和Service組成的,這些Activity和Service有可能運行在同一個進程中,也有可能運行在不同的進程中。那么,不在同一個進程的Activity或者Service是如何通信的呢?這就是本文中要介紹的Binder進程間通信機制了。 我們知道,Android系統是基于Linux內核的,而Linux內核繼承和兼容了豐富的Unix系統進程間通信(IPC)機制。有傳統的管道(Pipe)、信號(Signal)和跟蹤(Trace),這三項通信手段只能用于父進程與子進程之間,或者兄弟進程之間;后來又增加了命令管道(Named Pipe),使得進程間通信不再局限于父子進程或者兄弟進程之間;為了更好地支持商業應用中的事務處理,在AT&T的Unix系統V中,又增加了三種稱為“System V IPC”的進程間通信機制,分別是報文隊列(Message)、共享內存(Share Memory)和信號量(Semaphore);后來BSD Unix對“System V IPC”機制進行了重要的擴充,提供了一種稱為插口(Socket)的進程間通信機制。若想進一步詳細了解這些進程間通信機制,建議參考Android學習啟動篇一文中提到《Linux內核源代碼情景分析》一書。 但是,Android系統沒有采用上述提到的各種進程間通信機制,而是采用Binder機制,難道是因為考慮到了移動設備硬件性能較差、內存較低的特點?不得而知。Binder其實也不是Android提出來的一套新的進程間通信機制,它是基于[OpenBinder](http://www.angryredplanet.com/~hackbod/openbinder/docs/html/BinderIPCMechanism.html)來實現的。OpenBinder最先是由[Be Inc.](http://en.wikipedia.org/wiki/Be_Inc.)開發的,接著[Palm Inc.](http://en.wikipedia.org/wiki/Palm,_Inc.)也跟著使用。現在OpenBinder的作者[Dianne Hackborn](http://www.angryredplanet.com/~hackbod/)就是在Google工作,負責Android平臺的開發工作。 前面一再提到,Binder是一種進程間通信機制,它是一種類似于COM和CORBA分布式組件架構,通俗一點,其實是提供遠程過程調用(RPC)功能。從英文字面上意思看,Binder具有粘結劑的意思,那么它把什么東西粘結在一起呢?在Android系統的Binder機制中,由一系統組件組成,分別是Client、Server、Service Manager和Binder驅動程序,其中Client、Server和Service Manager運行在用戶空間,Binder驅動程序運行內核空間。Binder就是一種把這四個組件粘合在一起的粘結劑了,其中,核心組件便是Binder驅動程序了,Service Manager提供了輔助管理的功能,Client和Server正是在Binder驅動和Service Manager提供的基礎設施上,進行Client-Server之間的通信。Service Manager和Binder驅動已經在Android平臺中實現好,開發者只要按照規范實現自己的Client和Server組件就可以了。說起來簡單,做起難,對初學者來說,Android系統的Binder機制是最難理解的了,而Binder機制無論從系統開發還是應用開發的角度來看,都是Android系統中最重要的組成,因此,很有必要深入了解Binder的工作方式。要深入了解Binder的工作方式,最好的方式莫過于是閱讀Binder相關的源代碼了,Linux的鼻祖Linus Torvalds曾經曰過一句名言RTFSC:Read The Fucking Source Code。 雖說閱讀Binder的源代碼是學習Binder機制的最好的方式,但是也絕不能打無準備之仗,因為Binder的相關源代碼是比較枯燥無味而且比較難以理解的,如果能夠輔予一些理論知識,那就更好了。閑話少說,網上關于Binder機制的資料還是不少的,這里就不想再詳細寫一遍了,強烈推薦下面兩篇文章: * [Android深入淺出之Binder機制](http://www.cnblogs.com/innost/archive/2011/01/09/1931456.html) * [Android Binder設計與實現 – 設計篇](http://disanji.net/2011/02/28/android-bnder-design/) Android深入淺出之Binder機制一文從情景出發,深入地介紹了Binder在用戶空間的三個組件Client、Server和Service Manager的相互關系,Android Binder設計與實現一文則是詳細地介紹了內核空間的Binder驅動程序的數據結構和設計原理。非常感謝這兩位作者給我們帶來這么好的Binder學習資料。總結一下,Android系統Binder機制中的四個組件Client、Server、Service Manager和Binder驅動程序的關系如下圖所示: ![](http://hi.csdn.net/attachment/201107/19/0_13110996490rZN.gif) 1. Client、Server和Service Manager實現在用戶空間中,Binder驅動程序實現在內核空間中 2. Binder驅動程序和Service Manager在Android平臺中已經實現,開發者只需要在用戶空間實現自己的Client和Server 3. Binder驅動程序提供設備文件/dev/binder與用戶空間交互,Client、Server和Service Manager通過open和ioctl文件操作函數與Binder驅動程序進行通信 4. Client和Server之間的進程間通信通過Binder驅動程序間接實現 5. Service Manager是一個守護進程,用來管理Server,并向Client提供查詢Server接口的能力 至此,對Binder機制總算是有了一個感性的認識,但仍然感到不能很好地從上到下貫穿整個IPC通信過程,于是,打算通過下 1. Service Manager是如何成為一個守護進程的?即Service Manager是如何告知Binder驅動程序它是Binder機制的上下文管理者。 2. Server和Client是如何獲得Service Manager接口的?即defaultServiceManager接口是如何實現的。 3. Server是如何把自己的服務啟動起來的?Service Manager在Server啟動的過程中是如何為Server提供服務的?即IServiceManager::addService接口是如何實現的。 4. Service Manager是如何為Client提供服務的?即IServiceManager::getService接口是如何實現的。 在接下來的四篇文章中,將按照這四個情景來分析Binder源代碼,都將會涉及到用戶空間到內核空間的Binder相關源代碼。這里為什么沒有Client和Server是如何進行進程間通信的情景呢? 這是因為Service Manager在作為守護進程的同時,它也充當Server角色。因此,只要我們能夠理解第三和第四個情景,也就理解了Binder機制中Client和Server是如何通過Binder驅動程序進行進程間通信的了。 為了方便描述Android系統進程間通信Binder機制的原理和實現,在接下來的四篇文章中,我們都是基于C/C++語言來介紹Binder機制的實現的,但是,我們在Android系統開發應用程序時,都是基于Java語言的,因此,我們會在最后一篇文章中,詳細介紹Android系統進程間通信Binder機制在應用程序框架層的Java接口實現: 5. Android系統進程間通信Binder機制在應用程序框架層的Java接口源代碼分析。
                  <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>

                              哎呀哎呀视频在线观看