Android之Binder浅析

来源:互联网 发布:iphone导入照片到mac 编辑:程序博客网 时间:2024/05/16 00:51
 

沟通,这个事情很重要。同时沟通的方式也很重要。但凡重要的事情都很麻烦。人之间如此,软件模块之间也如此。    ---- segments

 

        Binder模块是随着android的火爆,得到人们的关注的。总体上说,Binder是一个轻量级的IPC组件框架。大家在Android里看到的binder是之前的一个叫做open-binder的开源项目在Android的操作系统上的一次实现。

 

一、Binder是什么?

        Binder在它的官方网站上是这样定义的。binder是一个分布式的组件架构,它类似于COM和CORBA。

 

        open-binder具有如下的特性:

 

1. 具有分布式的架构。

 

2. 面向系统级的开发。

        面向系统层的,而不是面向应用层的。openbinder的目标是进程和IPC,而不是面向跨网络通讯。网络通讯在openbinder没有实现(注意是在open-binder里面,而不是android的binder里面),当然这个不是binder架构本身限制问题。

 

3. 本身使用C++语言实现。

 

4. 多线程编程的支持。

        支持多线程编程的各种线程模型。不强制使用特定的线程模型。

 

5. 可支持多操作系统平台。

        从BeOS开始, 到Windows和Palm OS Cobalt,再到android。binder都是可以在这些不同平台实现和使用的。binder使用一些组件和对象来呈现一些基本的系统服务,比如进程和共享内存。它没有试图取代和隐藏操作系统中那些传统的概念,而是拥抱和超越它们。这使得binder可以支持大多数的传统操作系统平台。

 

6.良好的硬件伸缩性。

         对硬件要求很低。从50MHz ARM 7 CPU (without memory protection) 到 400MHz ARM 9 CPU,以及更强大的CPU。

 

7. 用户可定制性高。

         作为IPC的机制实现,串联了系统里的大部分组件,并且将各个组件之间的耦合行降到最低。各个组件的可以自由修改和替换,提高了用户的可定制性。

 

8. 应用的ROBUST高。

 

 

误解1:binder是在D-BUS接口上封装得来的。

除了binder和D-BUS都是一种IPC组件外,2者都是独立发展出来的。Binder参考更多的是COM和CORBA, 架构上二者也有较大的出入,不具有太多的相似性。

 

误解2:binder是google的工程师为了android全新开发的模块,之前不存在。

Binder在android之前就存在了。binder也不是一个新技术和新想法。它最在开发在BeOS上,后来在Palm OS Cobalt得到产品化。andorid里的binder基本上binder的作者按照binder最初的设计思想参考Palmsource开放出来的 开源项目openbinder在android里面重新实现的。

 

 

二、为什么android选择Binder?

 

        实际上IPC的open source的项目还是有的,顶顶大名的D-BUS就是其中作的很完善的一个。为什么android不直接用D-BUS?

 

         不知道有没有人考虑这个问题。我尝试想了下,可能有以下原因:

 

1. Binder对硬件要求很低,这正好符合android的实际情况,android的产品线广泛,芯片主频各个层次的都有,要在低端的机器上跑的顺畅,软件本身的性能要求还是很重要。

 

2. D-BUS最初的需求还是满足PC的桌面应用的。它从开始就不是为了嵌入式的受限环境开发的。而Binder相对而言要根正苗红很多。当然,android里面还是用到了D-BUS。但是,binder确实是呆在android系统层面里的了。

 

3. Binder经历过产品化的考验(Palm OS Cobalt),并且对多个操作系统平台都可以提供支持。

 

4. Binder的作者跳槽去了google,并且参与到了android的开发。Dianne Hackborn,大家有空去看下他的主页。他是从palmsource跳槽去google的。有了这样的原作者在,继续binder的开发,我看是熟门熟路的事情。

 

5. Binder和D-BUS在各个方面都可以拿出来分析,不过这个需要很大的篇幅来写了。比如binder使用加入一个binder驱动的方式来实现2个进程间数据交换。这个和D-BUS是很大的不同。

 

参考:

http://www.angryredplanet.com/~hackbod/openbinder/

原创粉丝点击