IPC 原理

2016-08-31  本文已影响0人  chelFang

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对象

上一篇 下一篇

猜你喜欢

热点阅读