看板 AndroidDev 關於我們 聯絡資訊
※ 引述《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)
tomap41017:推!講得很詳細~ 01/18 01:22