Android 底层分析
Android 应用的开发者是工作在 Android 外特性概念空间的,这里没有了 Linux 的一点气息,Android
构建的外特性空间概念包含了:Activity,Provider,Interface,Events,Provider,Service 等。至于 JVM
空间和 C++空间的划分是为了研究 Android 核心的描述而提出的,我们在做 Android 系统开发时,常常需
要修改到 JNI 的 Native 部分。后面我将用较多的篇幅来深入阐述这个部分。
6 IPC 框架分析 Binder,Service,Service manager
我首先从宏观的角度观察 Binder,Service,Service#Manager,并阐述各自的概念。从 Linux 的概念
空间中,Android 的设计 Activity 托管在不同的的进程,Service 也都是托管在不同的进程,不同进程间的
Activity,Service 之间要交换数据属于 IPC。Binder 就是为了 Activity 通讯而设计的一个轻量级的 IPC 框架。
在代码分析中,我发现 Android 中只是把 Binder 理解成进程间通讯的实现,有点狭隘,而是应该站在
公共对象请求代理这个高度来理解 Binder,Service 的概念,这样我们就会看到不一样的格局,从这个高
度来理解设计意图,我们才会对 Android 中的一些天才想法感到惊奇。从 Android 的外特性概念空间中,
我们看不到进程的概念,而是 Activity,Service,AIDL,INTENT。一般的如果我作为设计者,在我们的
根深蒂固的想法中,这些都是如下的 C/S 架构,客户端和服务端直接通过 Binder 交互数据,打开 Binder
写入数据,通过 Binder 读取数据,通讯就可以完成了。
该注意到 Android 的概念中,Binder 是一个很低层的概念,上面一层根本都看不到 Binder,而是
Activity 跟一个 Service 的对象直接通过方法调用,获取服务。
这个就是 Android 提供给我们的外特性:在 Android 中,要完成某个操作,所需要做的就是请求某个
有能力的服务对象去完成动作,而无需知道这个通讯是怎样工作的,以及服务在哪里。所以 Andoid 的 IPC
在本质上属于对象请求代理架构,Android 的设计者用 CORBA 的概念将自己包装了一下,实现了一个微
13