Binder是为了解决跨进程通信。你说AIDL,它是基于Binder的扩展
Binder分为Client和Server两个进程。
注意,这里的Client和Server并不是单一规定死的,谁只能是Server或者谁只能是Clitent;
举例:两个进程A和B之间使用Binder通信,进程A发消息给进程B,那么这时候A是Binder Client,B是Binder Server;进程B发消息给进程A,那么这时候B是Binder Client,A是Binder Server;
看一下图分析
Binder
图中的IPC就是进程间通信的意思。
图中的ServiceManager,负责把Binder Server注册到一个容器中。
有人把ServiceManager比喻成电话局,存储着每个住宅的座机电话,还是很恰当的。张三给李四打电话,拨打电话号码,会先转接到电话局,电话局的接线员查到这个电话号码的地址,因为李四的电话号码之前在电话局注册过,所以就能拨通;没注册,就会提示该号码不存在。
对照着Android Binder机制,对着上面这图,张三就是Binder Client,李四就是Binder Server,电话局就是ServiceManager,电话局的接线员在这个过程中做了很多事情,对应着图中的Binder驱动
再来一张更加生动的图
Binder,图中的SM也就是ServiceManager。
我们看到,Client想要直接调用Server的add方法,是不可以的,因为它们在不同的进程中,这时候就需要Binder来帮忙了。
Server在SM这个容器中注册。
Client想要调用Server的add方法,就需要先获取Server对象, 但是SM不会把真正的Server对象返回给Client,而是把Server的一个代理对象返回给Client,也就是Proxy。
Client调用Proxy的add方法,SM会帮他去调用Server的add方法,并把结果返回给Client。
好了,Binder分析到此结束. 至于Binder驱动中间做了啥,有需要的可以去自行查看,反正我是看不太懂(哭.. ) |