一、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 ManagerClient找到目标进程:根据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)。