几乎所有的进程间通讯都是使用该进制完成的。 图 2 描述了 Binder 机制的请求和响
应过程:
图 2. Binder 机制的请求和响应过程
Binder Driver 作为 Binder 机制的核心部分完成底层进程间通讯的工作。被请求的进程
(这里是系统服务进程)通常会缓存一些线程,当有请求时,在这些线程中完成请求。
了解了 Binder 机制之后,我们继续来看 LocationManager,在
LocationManager.java( 位于:frameworks/base/location/java/android/location/) 中可
以看到,LocationManager 类中所有功能的实现都是依赖于一个名称为 mService 的字
段来实现的,这个字段的类型是 ILocationManager。而这个对象就是我们上面所说的
代理。mService 字段是在 LocationManager 的构造函数中被初始化的,因此找到
LocationManager 构造函数被调用的地方就可以知道这个代理对象是哪里来的了。 在
ContextImpl.java(frameworks/base/core/java/android/app) 中有这样一段代码,如清
单 2 所示:
清单 2. registerService 方法中的代码片段
(3 $36054$0+'?*()
3@()
$1"(3 $36054$0)&
'($$.())&
//)&
在这里,我们见到了 ServiceManager 这个类,上文说了,这个类是专门用来管理系
统服务的。通过它,我们便可以获取定位服务的实现类对象,然后又通过
ILocationManager.Stub.asInterface(b) 将其转换成服务的代理存放到了
LocationManager 中。 好奇心重的读者一定要问:那 ServiceManager 中所管理的系
统服务对象又是从哪里来的呢?要弄清这个问题,还需要比较多的调查。下面我们来
详细讲解: 在 Android 系统启动过程中,需要完成一系列的初始化动作。源码中有一