→ tomap41017:推!講得很詳細~ 01/18 01:22
※ 引述《bluestar8783 (藍星)》之銘言:
: 這兩天在trace Android Framework
: 會發現有IBinder / Binder / Bnxxxx / Bpxxxx /Ixxxxx,這幾樣class
: 想請問這幾樣的關係是什麼呢?
: 是否有大大能夠詳細說明一下呢?
: 感激
帶I頭的大部分都是給底下繼承的東西當模板抄的。
Bn/Bp這個是Binder上層實做的切割,掛Bn頭的負責service端,
Bp頭的則是掛在Client process裡面的服務參考。
講白了就是Proxy Pattern。
結構上大致是像底下
Ixxxx IxxxxService
| ^
V |
Bpxxxx BnxxxxService
| ^
V |
+----------Binder Driver---------+
這一串往上往下的邏輯
I開頭包裝的是這個服務要怎麼用/提供,
例如Camera的服務和Audio服務等等每個都不同。
Bp開頭包裝的是怎麼把這些東西包裝成Binder driver看得懂的東西,
透過包裝成Parcel丟給對面Bn開頭的Service做處理,
具體就是透過Binder的標準介面。
Client端從上到下是這樣:
操作Client的邏輯(依服務不同)
操作Binder的邏輯(大家一樣)
包裝成Parcel準備丟給Binder driver(依服務不同)
丟給Binder Driver的邏輯(大家一樣)
Service的邏輯則剛好反方向。
大家一樣的部分大概都是靠C++的繼承和模板在搞,
所以你會看到一堆Service class都繼承類似的東西。
不過這段機制的code我認為寫的很漂亮,值得花時間
自己去追一次。
憑印象寫的,省略很多東西,現在市面上的書很多,
可以找一本來看看。
--
Beware of bugs in the above code;
I have only proved it correct, not tried it.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.193.107
※ 編輯: iincho 來自: 114.32.193.107 (01/16 22:38)