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

时间: 2024-10-22 11:21:26

Andorid Binder进程间通信---总结的相关文章

Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数

本文参考<Android系统源代码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder ----BpBinder.cpp ----Parcel.cpp ----ProcessState.cpp ----Binder.cpp ----IInterface.cpp ----IPCThreadState.cpp ----IServiceManager.cpp ----Static.cpp ~/Androi

Andorid Binder进程间通信---Java接口源代码--System和应用程序进程间通信

本文参考<Android系统源代码情景分析>,作者罗升阳 一.架构代码: ~/Android/frameworks/base/core/java/android/os ----IInterface.java (Interface) ----IServiceManager.java (IServiceManager) ----IBinder.java (IBinder) ----Binder.java (BinderProxy,Binder) ----ServiceManagerNative.j

Andorid Binder进程间通信---Binder对象死亡通知机制

本文参考<Android系统源代码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder ----BpBinder.cpp ----Parcel.cpp ----ProcessState.cpp ----Binder.cpp ----IInterface.cpp ----IPCThreadState.cpp ----IServiceManager.cpp ----Static.cpp ~/Androi

Android Binder进程间通信---ServiceManager代理对象的获取过程

本文参考<Android系统源代码情景分析>,作者罗升阳. 一.测试代码: -/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFregService.h ~/Android/external/binder/client ----FregClient.cpp Binder库(libbinder)代码: ~/Android/fr

Android Binder进程间通信---注册Service组件---发送和处理BC_REPLY返回协议

本文参考<Android系统源代码情景分析>,作者罗升阳 一.测试代码: -/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFregService.h ~/Android/external/binder/client ----FregClient.cpp Binder库(libbinder)代码: ~/Android/fra

Android Binder进程间通信---Binder类图

上传两张Binder类图,有助于理解Binder进程间通信: Android Binder进程间通信---Binder类图

Android Binder进程间通信---注册Service组件---Server处理BC_TRANSACTION

这是我参照之前在iOS项目中用过的一个不规则形状按钮的第三方Button,这里用Cocos2d-x实现一个相似功能的按钮. 原文地址:http://blog.csdn.net/qqmcy/article/details/26161339 代码下载:http://download.csdn.net/detail/qqmcy/7365843 使用方法: .h // // TestScene.h // maptest // // Created by 杜甲 on 14-5-18. // // #ifn

Android Binder进程间通信---注册Service组件---封装进程间通信数据

本文参考<Android系统源代码情景分析>,作者罗升阳 一.测试代码: -/Android/external/binder/server ----FregServer.cpp ~/Android/external/binder/common ----IFregService.cpp ----IFregService.h ~/Android/external/binder/client ----FregClient.cpp Binder库(libbinder)代码: ~/Android/fra

android binder 进程间通信机制4-Service Manager

Service Manager 是Binder进程间通信的核心组件之一: 它扮演者Binder进程间通信上下文(Context Manager)的角色 负责管理系统中的Service组件 向Client组件提供获取代理对象的服务 一.Service Manager的启动 1.ServiceManager是由init负责启动的,启动脚本在system/core/rootdir/init.rc中. service servicemanager /system/bin/servicemanager c