W作者iincho (世界的尽头)
看板AndroidDev
标题Re: [问题] IBinder/Binder/Bnxxxx是什麽?
时间Mon Jan 16 21:53:35 2012
※ 引述《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)
1F:→ tomap41017:推!讲得很详细~ 01/18 01:22