zoukankan      html  css  js  c++  java
  • Andorid Binder进程间通信---总结

    一、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)。

            Client处理数据:返回Client代理对象(句柄值是上面Client引用对象的句柄值)。


    三、Client和Server进程间通信

           眼下已经获取了Client代理对象,Client引用对象,Server实体对象,Server本地对象。

           Client----->Server

           Client找到目标进程:依据Client代理对象的句柄值,首先找到Client引用对象,通过Client引用对象再找到Server的实体对象,通过Server实体对象,找到Server进程,也就是目标进程。

           Client传递的数据:一个用于匹配的描写叙述符。和比如GET_VALUE命令。

           Server处理数据:依据找到的Server实体对象,找到Server本地对象,利用Server本地对象来运行GET_VALUE命令获取值

           Server----->Client

           Server找到目标进程:依据thread->transaction_stack->from找到目标进程,即Client进程。

           Server传递的数据:传递的数据返回值是getVal获取的值(利用Server本地对象来运行GET_VALUE命令获取值)。

           Client处理数据:把上面返回的结果读取出来。

  • 相关阅读:
    217. 存在重复元素
    189. 旋转数组
    122. 买卖股票的最佳时机 II
    26. 删除排序数组中的重复项
    [剑指Offer]二进制中1的个数
    [Unity]Unity更改黑色主题(个人版)
    [Unity]限制两个物体之间的距离
    [Untiy]贪吃蛇大作战(五)——游戏主界面
    sql server 函数详解(3)数据类型转换函数和文本图像函数
    sql server 函数详解(2)数学函数
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4280362.html
Copyright © 2011-2022 走看看