對Binder通信機制的強行理解

參考
Android Bander設(shè)計與實現(xiàn) - 設(shè)計篇
Binder學(xué)習指南
github_Binder機制

其中的各種概念和比喻讓我看的十分痛苦,不知道是我的理解能力太差,還是人類的語言太蒼白布蔗。我按自己的理解整理出一下筆記孔飒。主要是對概念的梳理,刨除比喻凛膏,以簡要的文字腿宰,把我從這三篇文章中理解到的內(nèi)容闡述出來,理解深度也根據(jù)自己的水平來覆劈。當時內(nèi)心急躁保礼,沒有細看,也沒有全看责语。有人看到我這篇文章了炮障,如發(fā)現(xiàn)問題,歡迎指正坤候。

(Android系統(tǒng)所基于的)Linux內(nèi)核基礎(chǔ)知識(為什么需要跨進程)

  1. 進程隔離/虛擬地址空間:每個進程對應(yīng)一個虛擬地址空間铝阐,不同進程數(shù)據(jù)不共享。
  2. 系統(tǒng)調(diào)用:Linux分內(nèi)核空間和用戶空間铐拐,應(yīng)用程序存在于用戶空間徘键,不能直接訪問內(nèi)核空間练对,但可以通過系統(tǒng)調(diào)用間接訪問。這樣間接的方式可對訪問權(quán)限進行限制吹害,保證系統(tǒng)的安全螟凭。跨進程通信的原理它呀,就是通過系統(tǒng)調(diào)用功能螺男,使用內(nèi)核空間作為橋梁,完成不同應(yīng)用程序間的通信纵穿。

為什么使用Binder

  1. Android廣泛使用跨進程通信
  2. 性能:Binder拷貝數(shù)據(jù)的次數(shù)少下隧,性能比socket、管道谓媒、消息隊列等方式更高效
  3. 安全:Binder支持對通信雙方進行身份校驗

Binder通信模型

  1. Binder驅(qū)動:“驅(qū)動”是保證計算機能操作硬件設(shè)備的一小塊代碼淆院,與此類似,“Binder驅(qū)動”是Android系統(tǒng)中保證Binder對象能操作內(nèi)核空間的一小塊代碼句惯。
  2. Binder(對象土辩,或?qū)嶓w):提供了間接訪問內(nèi)核空間的功能,由Server創(chuàng)建并向ServiceManager注冊抢野,Client可以通過對Binder對象的引用與Server進行通信拷淘。所謂注冊,就是將對象的名字和引用的映射關(guān)系記錄在ServiceManager中指孤。
  3. Binder引用(或代理對象):Client對Binder對象所持有的引用启涯,或稱代理對象,由Binder驅(qū)動根據(jù)Binder對象創(chuàng)建恃轩。Client通過它可以調(diào)用Binder對象的功能结洼,實現(xiàn)方式由Binder驅(qū)動完成。
  4. Client和Server(進程):假設(shè)發(fā)起和接收通信請求的進程分別為Client和Server详恼。
  5. ServiceManager(進程):作用是將字符形式的Binder名字轉(zhuǎn)化成Client中對該Binder的引用,使得Client能夠通過Binder名字獲得Binder引用引几。(ServiceManager也是一個進程昧互,對于ServiceManager而言,其他所有的進程都是Client伟桅,也就是說敞掘,它是其他所有進程的Server。它的Binder引用是0號引用楣铁,該Binder沒有名字也不需要注冊玖雁。其它進程要通過0號引用向ServiceManager發(fā)起注冊Binder或獲取Binder引用的請求)
  6. Client、Server盖腕、ServiceManager運行于用戶空間赫冬,Binder驅(qū)動運行于內(nèi)核空間浓镜。
  7. 通信流程:
    1. ServiceManager的建立:進程向Binder驅(qū)動申請為ServiceManager,此時進程還沒有區(qū)分為Client角色或Server角色劲厌,所以統(tǒng)稱之為Service膛薛。(我理解的建立是,其他進程通過0號引用和ServiceManager建立了連接补鼻,不知道是不是這樣)
    2. Server創(chuàng)建Binder對象并向ServiceManager注冊哄啄。
    3. Client通過Binder的名字向ServiceManager查詢和獲取Binder引用。
    4. Client通過Binder引用與Server通信风范,Binder通過操作內(nèi)核空間咨跌,實現(xiàn)了兩者的跨進程通信。
Binder通信示意圖

擴展

匿名Binder:沒有向ServiceManager注冊的Binder對象硼婿,即該Binder對象的引用沒有公開锌半,能收到此匿名Binder引用的Client,便可以和Server建立起一條私密的通道加酵。(具體Client怎么才能收到拳喻,在文章中沒找到)

Binder的總結(jié)

  1. 通常意義下,Binder指的是一種通信機制猪腕。(以上的Binder是Binder對象的簡稱)
  2. 對于Server進程來說冗澈,Binder對象指的是Binder本地對象,對于Client來說陋葡,Binder對象指的是Binder代理對象亚亲。
  3. 對于傳輸過程而言,Binder對象是可以進行跨進程傳遞的對象腐缤。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捌归,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子岭粤,更是在濱河造成了極大的恐慌惜索,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剃浇,死亡現(xiàn)場離奇詭異巾兆,居然都是意外死亡,警方通過查閱死者的電腦和手機虎囚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門角塑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淘讥,你說我怎么就攤上這事圃伶。” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵窒朋,是天一觀的道長搀罢。 經(jīng)常有香客問我,道長炼邀,這世上最難降的妖魔是什么魄揉? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮拭宁,結(jié)果婚禮上洛退,老公的妹妹穿的比我還像新娘。我一直安慰自己杰标,他們只是感情好兵怯,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腔剂,像睡著了一般媒区。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掸犬,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天袜漩,我揣著相機與錄音,去河邊找鬼湾碎。 笑死宙攻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的介褥。 我是一名探鬼主播座掘,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柔滔!你這毒婦竟也來了溢陪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤睛廊,失蹤者是張志新(化名)和其女友劉穎形真,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體超全,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡咆霜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卵迂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裕便。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡绒净,死狀恐怖见咒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挂疆,我是刑警寧澤改览,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布下翎,位于F島的核電站,受9級特大地震影響宝当,放射性物質(zhì)發(fā)生泄漏视事。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一庆揩、第九天 我趴在偏房一處隱蔽的房頂上張望俐东。 院中可真熱鬧,春花似錦订晌、人聲如沸虏辫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砌庄。三九已至,卻和暖如春奕枢,著一層夾襖步出監(jiān)牢的瞬間娄昆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工缝彬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萌焰,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓跌造,卻偏偏與公主長得像杆怕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子壳贪,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容