看Android源码无论如何绕不开Binder,因此我一直对Binder的实现机制有浓厚的兴趣。无奈本人功力不够,所以对此一直没有清晰的认识。看了网上一些分析Binder的文章,基本都是源码分析,我觉得对于Binder这样一种比较复杂的框架,最好不要一开始就进入到源码这么细节的层面,很容易找不到北。我觉得应该先撇开代码,有原理性的介绍,再根据个人需要深入代码去分析。因为没有找到合适的文章,所以我就想自己来探究,自己来写,我主要想解决以下几个问题:
1. Binder的历史?
2. Binder和Linux原有的IPC有什么区别,为什么一定要用Binder?
3. Binder整体的设计是怎样的?
4. Binder的跨进程数据传输是怎么实现的?
但是,正当我准备自己动手探究时,却找到一篇很不错的文章Android Binder design and implementation design,一下子把我的问题都回答了,开心,又有点失落。这真是一篇高质量的文章,我想我可以把它翻译成中文,跟大家分享。然而紧接着在里面一个例子中看到"Zhang San"。心里惊呼“难道原文是中文?”。还真找到了,原文在CSDN上Android Bander设计与实现 - 设计篇。这下只有为国人感到自豪了。这篇文章清晰地阐述了Binder的设计实现机制,清晰易懂。
整体的设计已经了然于胸,就可以自己去看代码,亲自触摸里面的实现细节。网上有不少源码分析的文章,最有名的要数老罗的。但是我觉得源码就像一个丰富的宝库,源码分析应该是带着问题,有目的地去分析,不然只会被别人牵着鼻子走,或者迷失其中。就像老罗在系统地分析Android源码前也是看了很多书(见那两年炼就的Android内功修养)。
除了阅读源码,了解Binder的实现细节,我还想了解Linux原有的IPC机制,例如管道,System V IPC,socket是如何设计的,其设计思想和出发点各有什么不同?此处先留着问题,后面再探究总结。