美文网首页
Binder 分析

Binder 分析

作者: 4528283108ee | 来源:发表于2016-01-07 13:55 被阅读369次

    从 MediaService入手

    1 首先创建一个ProcessState对象 打开一个binder设备fd 映射一块共享内存

    2 获取 IServerManager 业务对象 包括如下操作

        (1)创建BpBinder对象 设置handle对象为0(handle值是找到对端的凭证)

         (2) 创建一个BpServerManager对象,该对象定义了ServerManager业务接口,并且持有一个成员变量 mRemote为刚才创建的BpBinder对象

    3 通信: 创建一个IPCThreadState对象 该对象是线程绑定的,其中包含发送缓冲对象和接受缓冲对象,要想和对端通信(也就是和BpBinder对应的handle的BnBinder通信)调用BpServerManager的业务接口,转而调用BpBinder的transact方法,转而调用该线程绑定的IPCThreadState函数,并传递handle进行向对端发送数据(向共享内存中写数据) 收到对方返回数据 每个线程总都有一个发送缓冲区和接收缓冲区,所以是线程安全的,具体Binder设备如何保证多个线程的安全,这个需要研究Binder驱动(类似将共享内存的同步逻辑封装到驱动中,而不是通信进程自行解决)


    4 IServiceManager 所调用的所有接口都是向远端发送Binder数据

    服务端ServiceManager  代码很简单,就是打开Binder设备得到fd,映射内存,死循环 阻塞等待对端请求到来,处理请求,写会结果


    服务端代码

    BnBinder 有个onTransact函数 客户端BBService 继承BnBinder 和IService接口,当调用onTransact的时候会根据请求码选择调用IService的具体方法,然后把执行结果返回给对端


    可见 Binder 通信是由 handler控制的 没有服务端也是可以互相通信的 是无连接的 ServerManager起到连接作用


    相关文章

      网友评论

          本文标题:Binder 分析

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