IPC 原理

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容