沟通,这个事情很重要。同时沟通的方式也很重要。但凡重要的事情都很麻烦。人之间如此,软件模块之间也如此。    ---- 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/

更多相关文章

  1. Android存储系统之架构篇
  2. Android 系统框架介绍
  3. 高焕堂《android从程序员到架构师之路》 YY讲坛直面大师学习架构
  4. Android开机向导setupwizard,设置系统语言,WiFi向导

随机推荐

  1. android定位得到城市
  2. 【android 其他】:Android 简史
  3. ERROR: No installed build tools found.
  4. 基于TCP/IP协议的Java服务端与Android客
  5. Android(安卓)USB OTG U盘读写相关使用最
  6. 自定义类似于listView中Item背景
  7. android webview 自定义404错误页面!
  8. 百度地图SDK for Android v2.1.2全新发布
  9. Android中attrs.xml
  10. android中无限循环滑动的gallery实例