用最通俗的語言總結(jié)Android Binder

角色: client 北滥、 service 昂勒、 serviceManager 井赌、Binder驅(qū)動

場景: 前三出演在用戶空間谤逼,后者在內(nèi)核空間作為幕后

劇本: a. client帶著“絕密級文件”需要跟神秘的service進(jìn)行會晤

b. client只知道service名字,但不知其人

c. service壓根就不知道有client會找她

后臺策劃1: 如下圖


劇場開幕: 基于以上劇本開演仇穗,

a. 由于業(yè)務(wù)發(fā)展client需要開展(調(diào)用)某項技能xx(方法)

b. 而這項技能掌握在server這種明星的手上

c. 由client(這種平民)直接要接觸到server流部,顯得太為不可能,那怎么拿到該項技能呢?

d. 代理纹坐,中間代理(就像租房中介)ta負(fù)責(zé)轉(zhuǎn)接“上與下(地位懸殊)”以及“租客與房東”此類關(guān)系的各種需求

e. proxy這里指的虛擬代理枝冀,真實(shí)代理還是binder負(fù)責(zé)

f. ?binder 在kernel 空間里為每一個進(jìn)程開辟了一塊用來做“黑交易(數(shù)據(jù)交互)”的內(nèi)存區(qū)(存放client 與 server 進(jìn)程處理的數(shù)據(jù))

智能的binder 為了提高“交易效率與數(shù)量”實(shí)現(xiàn)了一套機(jī)制,不僅為每個進(jìn)程創(chuàng)建一塊內(nèi)存區(qū)耘子,

此外 還“專門開辟了一塊共享內(nèi)存區(qū)用來存放處理完數(shù)據(jù)(以用來減少從kernel復(fù)制數(shù)據(jù)到用戶空間)” 見下面粉色(粉色粉色的)的圖

g. binder 對client來說果漾, 將請求打包成binder特有格式“paracel”傳輸?shù)?server

binder 對server來說,將client給到的請求進(jìn)行處理后谷誓,把結(jié)果包裝到paracel 送到binder 進(jìn)行發(fā)貨

i. ?client 可以選擇兩種方式來等待server處理結(jié)果: 阻塞(同步)一直專心致的等啊等跨晴,非阻塞(異步)提出了要求后,就不管了(跑了去干啥啥了)

h. 以上是每一次client ?通過 binder call method細(xì)節(jié)片林。

其實(shí)可總結(jié)為(“換做一種好理解的方式”)端盆,client通過binder 成功地獲取server對象實(shí)例的代理后怀骤,在本地任何操作就像是server親自發(fā)出指令一樣。

(這也是所謂的代理模式.... 姑且這么不恰當(dāng)理解&詮釋)焕妙,不服的(不服的來打架啊.....)


后臺策劃2:


劇場開演戲2: 基于策劃2開演

導(dǎo)演不滿意蒋伦,還要繼續(xù)BB.....

a. 例如client想要做一個“人生保健服務(wù)”但又不知道去哪里找店,于是打開手機(jī)輸入字段“人生保健服務(wù)”焚鹊,過了幾秒手機(jī)端就顯示了“周圍”(系統(tǒng)所具備的服務(wù))

b. 這里的ServicesManager將查詢結(jié)果(指向服務(wù)對象的類指針)返回給Client痕届,

c. ?Client 拿到“地址”踹緊口袋立馬打了一個滴滴屁顛顛的去店里做保健(向服務(wù)端call method,以期等待得到特定數(shù)據(jù))

d. ?Client怎么找到服務(wù)的呢末患? 原因是server早已在ServiceManager里面注冊自己的門店研叫,以等待顧客上門消費(fèi)

e. ?上面的一切都是在Binder地盤上完成交易,無奈他是老大璧针,提供了交易平臺(否則嚷炉,你以為隨隨便便就能找到保健店嗎,天真 ......)

劇終謝幕探橱,采訪幕后者“Binder”

在以上交易完成后申屹,請問

a. ?如何做到做好對接client 與server 的數(shù)據(jù)交互(通信傳輸)?

b. ?在系統(tǒng)里面面對多個client 有請求數(shù)據(jù)時隧膏,如何做到一一不落響應(yīng)每個客戶的請求哗讥?

c. ?binder掛掉了怎么辦?

以下統(tǒng)一回復(fù): ?謝謝 。

BpBinder對象:

a. ?客戶端通過它(IBinder)將數(shù)據(jù)請求傳達(dá)到Server端

BpBinder::transact(code ,Paracel&data,Paracel*reply, flags )

b. 緊接著IPCThreadState::transact(handle , code , Parcel &data , Paracel *reply , flags )收到命令立即將數(shù)據(jù)

裝入mOut變量里 (viawriteTransactionData(BC_TRANSACTION,flags , handle , code , data , NULL)

c. ?再通過waitForResponse(reply) ?把mOut的數(shù)據(jù)通過ioctl發(fā)送給 binder驅(qū)動 ?, 并得到 驅(qū)動返回處理數(shù)據(jù). ? // 這里可設(shè)置等待方式(TF_ONE_WAY同步)

d. binder 只有一個文件描述符, ?系統(tǒng)里多客戶進(jìn)程同時執(zhí)行遠(yuǎn)程調(diào)用胞枕,并在ioctl上等待 處理結(jié)果杆煞, Android 如何保證其處理返回的數(shù)據(jù)能正確的交到正確的進(jìn)程呢?

這就是核心: "Android 在binder驅(qū)動里記錄每次binder調(diào)用信息(包含線程ID)腐泻,這樣根據(jù)ID可以知道將對應(yīng)的數(shù)據(jù)交給那個等待線程决乎,喚醒該進(jìn)程來讀取緩沖區(qū)數(shù)據(jù)"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贫悄,隨后出現(xiàn)的幾起案子瑞驱,更是在濱河造成了極大的恐慌娘摔,老刑警劉巖窄坦,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凳寺,居然都是意外死亡鸭津,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門肠缨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逆趋,“玉大人,你說我怎么就攤上這事晒奕∥攀椋” “怎么了名斟?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長魄眉。 經(jīng)常有香客問我砰盐,道長,這世上最難降的妖魔是什么坑律? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任岩梳,我火速辦了婚禮,結(jié)果婚禮上晃择,老公的妹妹穿的比我還像新娘冀值。我一直安慰自己,他們只是感情好宫屠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布列疗。 她就那樣靜靜地躺著,像睡著了一般激况。 火紅的嫁衣襯著肌膚如雪作彤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天乌逐,我揣著相機(jī)與錄音竭讳,去河邊找鬼。 笑死浙踢,一個胖子當(dāng)著我的面吹牛绢慢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洛波,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼胰舆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蹬挤?” 一聲冷哼從身側(cè)響起缚窿,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焰扳,沒想到半個月后倦零,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吨悍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年扫茅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片育瓜。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡葫隙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躏仇,到底是詐尸還是另有隱情恋脚,我是刑警寧澤腺办,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站糟描,受9級特大地震影響菇晃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚓挤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一磺送、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灿意,春花似錦估灿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荒辕,卻和暖如春汗销,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抵窒。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工弛针, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人李皇。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓削茁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掉房。 傳聞我的和親對象是個殘疾皇子茧跋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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