http://blog.csdn.net/luoshengyang/article/details/664246
Binder的总体架构,它由Client、Server、Service Manager和驱动程序Binder四个组件构成。本文着重介绍组件Service Manager,它是整个Binder机制的守护进程,用来管理开发者创建的各种Server,并且向Client提供查询Server远程接口的功能
Android系统进程间通信Binder机制在应用程序框架层的Java接口:
1. 获取Service Manager的Java远程接口的过程;
2. HelloService接口的定义;
3. HelloService的启动过程;
4. Client获取HelloService的Java远程接口的过程;
5. Client通过HelloService的Java远程接口来使用HelloService提供的服务的过程。
1:
sServiceManager =newServiceManagerProxy(newBinderProxy());
总结一下,就是在Java层,我们拥有了一个Service Manager远程接口实现类ServiceManagerProxy,而这个ServiceManagerProxy对象在JNI层有一个句柄值为0的BpBinder对象与之通过gBinderProxyOffsets关联起来。
2:
定义aidl,生成Java 根据IHelloService接口的定义生成相应的Stub和Proxy类,这个就是我们熟悉的Binder机制的内容了,即实现这个HelloService的Server必须继续于这里的IHelloService.Stub类,而这个HelloService的远程接口就是这里的IHelloService.Stub.Proxy对象获得的IHelloService接口
Stub extends android.os.Binder ; Proxy implements android.os.IHelloService
3:
HelloService extends IHelloService.Stub
在frameworks/base/services/java/com/android/server/SystemServer.java文件中,定义了SystemServer类。SystemServer对象是在系统启动的时候创建的,它被创建的时候会启动一个线程来创建HelloService,并且把它添加到Service Manager中去。
会调用HelloService类的构造函数,而HelloService类继承于IHelloService.Stub类,IHelloService.Stub类又继承了Binder类,因此,最后会调用Binder类的构造函数
>一系列JNI
最后,通过BpBinder::transact函数进入到Binder驱动程序,然后Binder驱动程序唤醒Service Manager响应这个ADD_SERVICE_TRANSACTION请求
4:
return IHelloService.Stub.asInterface(ServiceManager.getService("hello"));,实际上是一个IHelloService.Stub.Proxy对象
网友评论