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的实体对象,System的实体对象又引用了Server的本地对象。

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的实体对象)的句柄值。

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处理数据:把上面返回的结果读取出来。

http://www.bkjia.com/Androidjc/814988.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/814988.htmlTechArticle一、Server和Service Manager进程间通信 Service Manager进程启动时,已经创建了Service Manager实体对象,没有Service Manager本地对象。 Server首先获取了...

本文源自: AG平台官网

上一篇:Android Parcelable的介绍与使用

下一篇:没有了