Android开发之Binder浅析

网上有非常多的Binder原理,很多都是贴一大堆底层代码,甚至是C/C++代码,对于应用开发的我来说,,貌似很难懂,而且即使懂了,不用,过段时间就忘了,所以决定就先理解个大概(还是因为太菜..)

先推荐一篇博客,觉得是讲Binder最好懂的一篇,以下摘自该文章,感谢作者

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来帮忙了。

  1. Server在SM这个容器中注册。
  2. Client想要调用Server的add方法,就需要先获取Server对象, 但是SM不会把真正的Server对象返回给Client,而是把Server的一个代理对象返回给Client,也就是Proxy。
  3. Client调用Proxy的add方法,SM会帮他去调用Server的add方法,并把结果返回给Client。

好了,Binder分析到此结束. 至于Binder驱动中间做了啥,有需要的可以去自行查看,反正我是看不太懂(哭.. )

推荐阅读更多精彩内容