Android源码分析之Binder进程间通信一

来源:互联网 发布:c语言的头文件 编辑:程序博客网 时间:2024/05/18 01:41

最近一直到阅读Android底层源码的一些东西,刚开始接触那些c/c++代码,真是头都大了,重新接触指针,想想就可以把书关了,去看自己最喜欢的Java吧。但是没办法的啊,必须的理解一些Android里Framework的底层实现,不然在面试里怎么突出的表现自己呢。幸好这时一位大神出现了:罗升阳写的一本《Android系统源码代码情景分析》,看完这本书,才明白Android的水也很深的啊!!

下面我具体讲下我读完这本书后,对Android利用Binder进行进程间通信这块的深刻理解,一方面是为了让自己加深下对Binder间进程通信印象,另一方面也为了给你自己面试攒点人品的啊!最近面试真是太背了!

首先谈到Binder,不得不问下:在Linux中进程间通信方式有那么多,如管道,消息队列,共享内存,信号量以及Socket等,为什么Google当年在设计Android时,偏偏非要自己创新一个Binder进程间通信方式呢?你所不知道的Binder好处有:

1)用Binder驱动程序来完成进程间通信的;

2)通过共享内存的方式来提供性能;

3)为进程请求分配线程池,来完成数据交互;

4)进程间通信采用同步方式。

然而Binder跟传统的进程间通信的区别在哪里呢?从传输性能上考虑,一、Socket传输效率低,开销大,主要用来在跨网络的进程间进行通信;二、消息队列和管道采用的是存储-转发的方式,也即数据先从发送方缓存区拷贝到内核的缓存区中;然后把内核缓存区数据拷贝到接收方缓存区中,所以数据至少需要拷贝两次。三、共享内存虽然不需要拷贝数据,但是其控制复杂,难以使用。下面是常见几种IPC方式数据拷贝的次数:


再者从安全性上考虑,首先传统的IPC方式中,接收方无法获得对方进程的UID/PID,从而没办法识别出对方的身份。然而Binder是基于C/S模式的,传输过程中数据只需拷贝一次,为发送方添加UID/PID身份,十分安全。

相信读到这里的,大家对Android为什么选中Binder来完成进程间通信的吧。其实很多初学Android的小伙伴们,应该会很感到疑惑:Android程序中自己很少接触到进程的。不错,这种方式确实是Google设计团队有意为之的,就是为了避免复杂的进程通信给使用者带来麻烦,这样的好处完全归功于Binder啊!Binder机制完成封装好了整个Android进程通信,作为一个Binder类库,你可以尽情的使用它的滴!要想明白Binder进程间通信的原理,必须得理解Binder类库哦!接下来我会写4篇博客来完整描述整个Binder进程间通信的原理,让你在彻底理解Binder!

博客一:ServiceManager成为Binder的守护进程;

博客二:Server进程和Client进程获取ServiceManager的远程接口;

博客三:Server进程的启动过程;

博客四:Client进程获取Server进程的远程接口;















0 0
原创粉丝点击