Andorid Binder进程间通信总结

本文详细总结了Android中Binder进程间通信的过程,包括Server与Service Manager、Client与Service Manager以及Client与Server之间的通信步骤,解析了数据传输、对象引用和内核缓冲区的使用,同时介绍了同步和异步传输的实现机制。
摘要由CSDN通过智能技术生成

一、Server和Service Manager进程间通信

        Service Manager进程启动时,已经创建了Service Manager实体对象,没有Service Manager本地对象。

        Server首先获取了Server代理对象,句柄值为0。没有Server引用对象。

        Server----->Service Manager

        Server找到目标进程:根据Server代理对象的句柄值0,找到Service Manager实体对象,然后找到Service Manger进程,也就是目标进程。

        Server传递的数据:包含flat_binder_object结构体,其中handle为Service Manager的引用对象的句柄值,Service Manager的引用对象引用了Server的实体对象,Server的实体对象又引用了Server的本地对象。(binder_transaction函数case BINDER_TYPE_BINDER)。

        Service Manager处理数据:svcinfo结构体ptr为Servicer Manager的引用对象句柄值,name为传递进来的字符串。

        Service Manager----->Server

        Service Manager找到目标进程:根据thread->transaction_stack->from找到目标进程,即Server进程。

        Service Manager传递的数据:返回正确值0。

        Server处理数据:Server循环等待。


二、Client和Service Manager进程间通信

        Service Manager进程启动时,已经创建了Service Manager实体对象,没有Service Manager的本地对象。

        Client首先获取了Client代理对象,句柄值为0。没有Client引用对象。

         Client----->Service Manager

        Client找到目标进程:根据Client进程代理对象的句柄值0,找到Service Manager实体对象,然后找到Service Manger进程,也就是目标进程。

        Client传递的数据:svcinfo 结构体name那个字符串。

        Service Manager处理数据:获得binder_object结构体,其中pointer指向了Service Manager的引用对象(引用了Server的实体对象)的句柄值。

        Service Manager----->Client

        Service Manager找到目标进程:根据thread->transaction_stack->from找到目标进程,即Client进程。

        Service Manager传递的数据:传递的内容flat_binder_object结构体,handle为Client的引用对象(引用了Server的实体对象)的句柄值。(binder_transaction函数case BINDER_TYPE_HANDLE)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值