android中的進程通信和Binder機制

進程間通信的方式

  • 共享內(nèi)存

    1. 創(chuàng)建共享內(nèi)存區(qū)int shmget(key_tkey,size_t size,int shmflg)
    2. 映射內(nèi)存共享區(qū)shmatchar *shmat(int shmid,viod *shmaddr,int shmflag)
  • 管道(Pipe)
    1.管道是單向的像水管一樣甜孤,要建立讀和寫兩個管道
    2.管道容量有限 當pipe滿時,會阻塞
    3.linux提供了pipe接口打開一個管道 int pipe(int pipefd[2],int flags)

  • Unix Domain Socket(UDS)
    1.cs模式 network socket就是uds
    2.對于同一機器的進程間通信,uds也可以完全勝任
    3.android版本以前android全部是使用binder進行進程間通信的歼郭,后來有一部分不得不使用uds代替厂抽,可見uds還是有一定優(yōu)勢的

同步機制的經(jīng)典實現(xiàn)

  • 信號量(Semaphore)
  • Mutex
  • 管程(Monitor)

android中的同步機制

  • Mutex
  • Condition
  • Barrier

android進程間通信的主要方式binder機制

如果統(tǒng)觀Binder中的各個組成元素剥扣,就會驚奇的發(fā)現(xiàn)它和TCP/IP網(wǎng)絡(luò)有很多相似之處:

  • Binder驅(qū)動->路由器
  • Service Manager->DNS
  • Binder Client->客戶端
  • Binder Server->服務(wù)端

首先Binder是android進程間通信的一種方式宜鸯,
基本原理:binder定義了4個角色:client坎怪,server岖沛,serviceManager 暑始,binder驅(qū)動
server會創(chuàng)建一個binder實體并起一個名字,然后將名字一塊以數(shù)據(jù)包的形式通過binder驅(qū)動發(fā)送給serviceManager 婴削,通知servicemanager注冊一個名字為xx的Binder廊镜,然后client通過名字查詢到該Binder 的引用。

注意

  1. Client和Server和ServiceManager實現(xiàn)在用戶空間唉俗,Binder驅(qū)動實現(xiàn)在內(nèi)核空間中
  2. Binder驅(qū)動程序和ServiceManager在Android中已經(jīng)實現(xiàn)嗤朴,開發(fā)者只需要實現(xiàn)Client和Server
  3. ServiceMagager是一個守護進程,用來管理Server虫溜,并向Client提供查詢Server接口的能力
  4. Client和Server之間通信雹姊,是通過Binder驅(qū)動程序間接實現(xiàn)

AIDL

  • AIDL是一個縮寫,全稱是Android Interface Definition Language衡楞,也就是Android接口定義語言吱雏。是的,首先我們知道的第一點就是:AIDL是一種語言

  • AIDL中的定向 tag 表示了在跨進程通信中數(shù)據(jù)的流向瘾境,其中 in 表示數(shù)據(jù)只能由客戶端流向服務(wù)端歧杏, out 表示數(shù)據(jù)只能由服務(wù)端流向客戶端,而 inout 則表示數(shù)據(jù)可在服務(wù)端與客戶端之間雙向流通迷守。其中犬绒,數(shù)據(jù)流向是針對在客戶端中的那個傳入方法的對象而言的。in 為定向 tag 的話表現(xiàn)為服務(wù)端將會接收到一個那個對象的完整數(shù)據(jù)盒犹,但是客戶端的那個對象不會因為服務(wù)端對傳參的修改而發(fā)生變動懂更;out 的話表現(xiàn)為服務(wù)端將會接收到那個對象的的空對象,但是在服務(wù)端對接收到的空對象有任何修改之后客戶端將會同步變動急膀;inout 為定向 tag 的情況下沮协,服務(wù)端將會接收到客戶端傳來對象的完整信息,并且客戶端將會同步服務(wù)端對該對象的任何變動卓嫂。

    All non-primitive parameters require a directional tag indicating which way the data goes . Either in , out , or inout . Primitives are in by default , and connot be otherwise .
    官網(wǎng)是這樣解釋的:所有的非基本參數(shù)都需要一個定向tag來指出數(shù)據(jù)流通的方式慷暂,不管是 in , out , 還是 inout 。基本參數(shù)的定向tag默認是并且只能是 in

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末行瑞,一起剝皮案震驚了整個濱河市奸腺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌血久,老刑警劉巖突照,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異氧吐,居然都是意外死亡讹蘑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門筑舅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來座慰,“玉大人,你說我怎么就攤上這事翠拣“孀校” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵误墓,是天一觀的道長蛮粮。 經(jīng)常有香客問我,道長谜慌,這世上最難降的妖魔是什么蝉揍? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮畦娄,結(jié)果婚禮上又沾,老公的妹妹穿的比我還像新娘。我一直安慰自己熙卡,他們只是感情好杖刷,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驳癌,像睡著了一般滑燃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颓鲜,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天表窘,我揣著相機與錄音,去河邊找鬼甜滨。 笑死乐严,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的衣摩。 我是一名探鬼主播昂验,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了既琴?” 一聲冷哼從身側(cè)響起占婉,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甫恩,沒想到半個月后逆济,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡磺箕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年纹腌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滞磺。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莱褒,靈堂內(nèi)的尸體忽然破棺而出击困,到底是詐尸還是另有隱情,我是刑警寧澤广凸,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布阅茶,位于F島的核電站,受9級特大地震影響谅海,放射性物質(zhì)發(fā)生泄漏脸哀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一扭吁、第九天 我趴在偏房一處隱蔽的房頂上張望撞蜂。 院中可真熱鬧,春花似錦侥袜、人聲如沸蝌诡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浦旱。三九已至,卻和暖如春九杂,著一層夾襖步出監(jiān)牢的瞬間颁湖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工例隆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留甥捺,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓镀层,卻偏偏與公主長得像涎永,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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