美文网首页
IPC 原理

IPC 原理

作者: chelFang | 来源:发表于2016-08-31 15:05 被阅读0次

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

    相关文章

      网友评论

          本文标题:IPC 原理

          本文链接:https://www.haomeiwen.com/subject/mcyqettx.html