亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android進(jìn)程間通信(IPC)機制Binder簡要介紹

 更新時間:2016年08月29日 08:50:19   作者:羅升陽  
本文主要介紹 Android進(jìn)程間通信(IPC)機制Binder簡要介紹, 這里介紹了Binder機制如何實現(xiàn)進(jìn)程通信機制,有研究Android源碼的朋友可以看下

        在Android系統(tǒng)中,每一個應(yīng)用程序都是由一些Activity和Service組成的,這些Activity和Service有可能運行在同一個進(jìn)程中,也有可能運行在不同的進(jìn)程中。那么,不在同一個進(jìn)程的Activity或者Service是如何通信的呢?這就是本文中要介紹的Binder進(jìn)程間通信機制了。

        我們知道,Android系統(tǒng)是基于Linux內(nèi)核的,而Linux內(nèi)核繼承和兼容了豐富的Unix系統(tǒng)進(jìn)程間通信(IPC)機制。有傳統(tǒng)的管道(Pipe)、信號(Signal)和跟蹤(Trace),這三項通信手段只能用于父進(jìn)程與子進(jìn)程之間,或者兄弟進(jìn)程之間;后來又增加了命令管道(Named Pipe),使得進(jìn)程間通信不再局限于父子進(jìn)程或者兄弟進(jìn)程之間;為了更好地支持商業(yè)應(yīng)用中的事務(wù)處理,在AT&T的Unix系統(tǒng)V中,又增加了三種稱為“System V IPC”的進(jìn)程間通信機制,分別是報文隊列(Message)、共享內(nèi)存(Share Memory)和信號量(Semaphore);后來BSD Unix對“System V IPC”機制進(jìn)行了重要的擴(kuò)充,提供了一種稱為插口(Socket)的進(jìn)程間通信機制。若想進(jìn)一步詳細(xì)了解這些進(jìn)程間通信機制,建議參考Android學(xué)習(xí)啟動篇一文中提到《Linux內(nèi)核源代碼情景分析》一書。

        但是,Android系統(tǒng)沒有采用上述提到的各種進(jìn)程間通信機制,而是采用Binder機制,難道是因為考慮到了移動設(shè)備硬件性能較差、內(nèi)存較低的特點?不得而知。Binder其實也不是Android提出來的一套新的進(jìn)程間通信機制,它是基于OpenBinder來實現(xiàn)的。OpenBinder最先是由Be Inc.開發(fā)的,接著Palm Inc.也跟著使用?,F(xiàn)在OpenBinder的作者Dianne Hackborn就是在Google工作,負(fù)責(zé)Android平臺的開發(fā)工作。

        前面一再提到,Binder是一種進(jìn)程間通信機制,它是一種類似于COM和CORBA分布式組件架構(gòu),通俗一點,其實是提供遠(yuǎn)程過程調(diào)用(RPC)功能。從英文字面上意思看,Binder具有粘結(jié)劑的意思,那么它把什么東西粘結(jié)在一起呢?在Android系統(tǒng)的Binder機制中,由一系統(tǒng)組件組成,分別是Client、Server、Service Manager和Binder驅(qū)動程序,其中Client、Server和Service Manager運行在用戶空間,Binder驅(qū)動程序運行內(nèi)核空間。Binder就是一種把這四個組件粘合在一起的粘結(jié)劑了,其中,核心組件便是Binder驅(qū)動程序了,Service Manager提供了輔助管理的功能,Client和Server正是在Binder驅(qū)動和Service Manager提供的基礎(chǔ)設(shè)施上,進(jìn)行Client-Server之間的通信。Service Manager和Binder驅(qū)動已經(jīng)在Android平臺中實現(xiàn)好,開發(fā)者只要按照規(guī)范實現(xiàn)自己的Client和Server組件就可以了。說起來簡單,做起難,對初學(xué)者來說,Android系統(tǒng)的Binder機制是最難理解的了,而Binder機制無論從系統(tǒng)開發(fā)還是應(yīng)用開發(fā)的角度來看,都是Android系統(tǒng)中最重要的組成,因此,很有必要深入了解Binder的工作方式。要深入了解Binder的工作方式,最好的方式莫過于是閱讀Binder相關(guān)的源代碼了,Linux的鼻祖Linus Torvalds曾經(jīng)曰過一句名言RTFSC:Read The Fucking Source Code。

        雖說閱讀Binder的源代碼是學(xué)習(xí)Binder機制的最好的方式,但是也絕不能打無準(zhǔn)備之仗,因為Binder的相關(guān)源代碼是比較枯燥無味而且比較難以理解的,如果能夠輔予一些理論知識,那就更好了。閑話少說,網(wǎng)上關(guān)于Binder機制的資料還是不少的,這里就不想再詳細(xì)寫一遍了,強烈推薦下面兩篇文章:

       Android深入淺出之Binder機制

        Android Binder設(shè)計與實現(xiàn) – 設(shè)計篇

        Android深入淺出之Binder機制一文從情景出發(fā),深入地介紹了Binder在用戶空間的三個組件Client、Server和Service Manager的相互關(guān)系,Android Binder設(shè)計與實現(xiàn)一文則是詳細(xì)地介紹了內(nèi)核空間的Binder驅(qū)動程序的數(shù)據(jù)結(jié)構(gòu)和設(shè)計原理。非常感謝這兩位作者給我們帶來這么好的Binder學(xué)習(xí)資料??偨Y(jié)一下,Android系統(tǒng)Binder機制中的四個組件Client、Server、Service Manager和Binder驅(qū)動程序的關(guān)系如下圖所示:

       

        1. Client、Server和Service Manager實現(xiàn)在用戶空間中,Binder驅(qū)動程序?qū)崿F(xiàn)在內(nèi)核空間中

        2. Binder驅(qū)動程序和Service Manager在Android平臺中已經(jīng)實現(xiàn),開發(fā)者只需要在用戶空間實現(xiàn)自己的Client和Server

        3. Binder驅(qū)動程序提供設(shè)備文件/dev/binder與用戶空間交互,Client、Server和Service Manager通過open和ioctl文件操作函數(shù)與Binder驅(qū)動程序進(jìn)行通信

        4. Client和Server之間的進(jìn)程間通信通過Binder驅(qū)動程序間接實現(xiàn)

        5. Service Manager是一個守護(hù)進(jìn)程,用來管理Server,并向Client提供查詢Server接口的能力

        至此,對Binder機制總算是有了一個感性的認(rèn)識,但仍然感到不能很好地從上到下貫穿整個IPC通信過程,于是,打算通過下面四個情景來分析Binder源代碼,以進(jìn)一步理解Binder機制:

       1. Service Manager是如何成為一個守護(hù)進(jìn)程的?即Service Manager是如何告知Binder驅(qū)動程序它是Binder機制的上下文管理者。

        2. Server和Client是如何獲得Service Manager接口的?即defaultServiceManager接口是如何實現(xiàn)的。

        3. Server是如何把自己的服務(wù)啟動起來的?Service Manager在Server啟動的過程中是如何為Server提供服務(wù)的?即IServiceManager::addService接口是如何實現(xiàn)的。

        4  Service Manager是如何為Client提供服務(wù)的?即IServiceManager::getService接口是如何實現(xiàn)的。

        在接下來的四篇文章中,將按照這四個情景來分析Binder源代碼,都將會涉及到用戶空間到內(nèi)核空間的Binder相關(guān)源代碼。這里為什么沒有Client和Server是如何進(jìn)行進(jìn)程間通信的情景呢? 這是因為Service Manager在作為守護(hù)進(jìn)程的同時,它也充當(dāng)Server角色。因此,只要我們能夠理解第三和第四個情景,也就理解了Binder機制中Client和Server是如何通過Binder驅(qū)動程序進(jìn)行進(jìn)程間通信的了。

        為了方便描述Android系統(tǒng)進(jìn)程間通信Binder機制的原理和實現(xiàn),在接下來的四篇文章中,我們都是基于C/C++語言來介紹Binder機制的實現(xiàn)的,但是,我們在Android系統(tǒng)開發(fā)應(yīng)用程序時,都是基于Java語言的,因此,我們會在最后一篇文章中,詳細(xì)介紹Android系統(tǒng)進(jìn)程間通信Binder機制在應(yīng)用程序框架層的Java接口實現(xiàn):

       5. Android系統(tǒng)進(jìn)程間通信Binder機制在應(yīng)用程序框架層的Java接口源代碼分析。

         以上就是關(guān)于Binder 機制的簡單介紹,后續(xù)繼續(xù)整理相關(guān)資料,謝謝大家對本站的支持! 

相關(guān)文章

  • Android圓角設(shè)置方法看著一篇文章就夠了

    Android圓角設(shè)置方法看著一篇文章就夠了

    我們在實際工作中,android經(jīng)常有需要實現(xiàn)圓角的場景,下面這篇文章主要給大家介紹了關(guān)于Android圓角設(shè)置方法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì)需要的朋友可以參考下
    2023-02-02
  • Toast和Handler的間隔使用實例

    Toast和Handler的間隔使用實例

    Toast和Handler的間隔使用實例,需要的朋友可以參考一下
    2013-05-05
  • Android開發(fā)之Animations動畫用法實例詳解

    Android開發(fā)之Animations動畫用法實例詳解

    這篇文章主要介紹了Android開發(fā)之Animations動畫用法,結(jié)合實例形式詳細(xì)分析了Animations動畫的類型、組成、模式及對應(yīng)的使用技巧,需要的朋友可以參考下
    2016-02-02
  • Android  view自定義實現(xiàn)動態(tài)進(jìn)度條

    Android view自定義實現(xiàn)動態(tài)進(jìn)度條

    這篇文章主要介紹了Android view自定義實現(xiàn)動態(tài)進(jìn)度條的相關(guān)資料,這里提供實例代碼及實現(xiàn)效果圖,需要的朋友可以參考下
    2016-12-12
  • Android自定義View實現(xiàn)簡單炫酷的球體進(jìn)度球?qū)嵗a

    Android自定義View實現(xiàn)簡單炫酷的球體進(jìn)度球?qū)嵗a

    這篇文章主要給大家介紹了關(guān)于Android自定義View實現(xiàn)簡單炫酷的球體進(jìn)度球的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Android?CameraX?打開攝像頭預(yù)覽功能

    Android?CameraX?打開攝像頭預(yù)覽功能

    這篇文章主要介紹了Android?CameraX?打開攝像頭預(yù)覽功能,模塊gradle的一些配置,使用的Android?SDK版本為31,啟用了databinding,具體實例代碼跟隨小編一起看看吧
    2021-12-12
  • Android Socket實現(xiàn)多個客戶端聊天布局

    Android Socket實現(xiàn)多個客戶端聊天布局

    這篇文章主要為大家詳細(xì)介紹了Android Socket實現(xiàn)多個客戶端聊天布局,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • android使用Textview實現(xiàn)伸縮效果

    android使用Textview實現(xiàn)伸縮效果

    這篇文章主要為大家詳細(xì)介紹了android使用Textview實現(xiàn)伸縮效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android Studio添加日志過濾方式

    Android Studio添加日志過濾方式

    這篇文章主要介紹了Android Studio添加日志過濾方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Android實現(xiàn)簡易的音樂播放器

    Android實現(xiàn)簡易的音樂播放器

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)簡易的音樂播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評論