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处理数据:把上面返回的结果读取出来。
Andorid Binder进程间通信---总结的更多相关文章
- Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数
本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder --- ...
- 源码分析——从AIDL的使用开始理解Binder进程间通信的流程
源码分析——从AIDL的使用开始理解Binder进程间通信的流程 Binder通信是Android系统架构的基础.本文尝试从AIDL的使用开始理解系统的Binder通信. 0x00 一个AIDL的例子 ...
- android binder 进程间通信机制4-Service Manager
Service Manager 是Binder进程间通信的核心组件之一: 它扮演者Binder进程间通信上下文(Context Manager)的角色 负责管理系统中的Service组件 向Clien ...
- android binder 进程间通信机制1-binder 驱动程序
以下内容只大概列个提纲,若要明白其中细节,还请看源码: 申明:本人菜鸟,希望得到大神指点一二,余心足已 binder 设备:/dev/binder binder 进程间通信涉及的四个角色: Clien ...
- android binder 进程间通信机制6-Binder进程间通信机制的JAVA接口
Binder间进程通信的JAVA层接口,主要是通过JNI方法来调用Binder库的C/C++接口 在JAVA层,将Service组件称为JAVA服务,Service组件的代理称为JAVA服务代理. 一 ...
- android binder 进程间通信机制3-Binder 对象生死
以下概述Binder通信过程中涉及到的四个对象:Binder本地对象.Binder实体对象.Binder引用对象.Binder代理对象的生死. 1.Binder通信的交互过程 1.Client 进程发 ...
- android binder 进程间通信机制2 - Binder进程间通信库实现原理
1.Service组件 使用模板类BnInterface描述,称为Binder本地对象,对应于Binder驱动程序中的Binder实体对象 实现原理图如下:
- android binder 进程间通信机制5-Service注册和代理对象的获取
ServiceManager,其实也是一个Service,不过它的Server端实现并未使用Binder库的结构实现,而是直接打开binder/dev进行通信的,不具有普遍性. 下面以MediaSer ...
- Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6629298 在前面一篇文章浅谈Android系 ...
随机推荐
- Android线程和handler
根据视频仿照着写了个demo: package com.wyl.wylthreadtest; import android.graphics.Color; import android.os.Bund ...
- chrome 浏览器帐号登录不来,如何解决自己的书签
装系统前把 该目录下 C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default 的 Bookmarks 复制出 ...
- form的验证用法
models.py forms.py html页面 第二种方法: 不继承model直接自定义内容 获得内容: if form.is_valid(): price = reques ...
- 17.1.1.7 Setting Up Replication with New Master and Slaves 设置复制对于新的Master和Slaves:
17.1.1.7 Setting Up Replication with New Master and Slaves 设置复制对于新的Master和Slaves: 最简单和最直接的方法是设置复制用于使 ...
- TreePuzzle 一点感想
题目链接 这一道题看起来像是一道贪心的水题,但是情况较难考虑周全,比如下图,我就考虑漏了这种情况,点0是可以移动到点1的.然后我就各种奇怪的分类讨论.最终还是没能A,决定放弃治疗. 然后我看了看解答, ...
- Java 开源博客——B3log Solo 0.6.7 正式版公布了!
Java 开源博客 -- B3log Solo 0.6.7 正式版公布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也很欢迎大家參与进来 :-) 特性 基于标签的文章分类 P ...
- 【模式识别】SVM核函数
下面是几种经常使用的核函数表示: 线性核(Linear Kernel) 多项式核(Polynomial Kernel) 径向基核函数(Radial Basis Function) 也叫高斯核(Gaus ...
- SqlServer字段说明查询(表基本信息查询)
--快速查看表结构(比较全面的) THEN obj.name ELSE '' END AS 表名, col.colorder AS 序号 , col.name AS 列名 , ISNULL(ep.[v ...
- 一天一个类,一点也不累之TreeSet
一天一个类,一点也不累. 现在要说的是---TreeSet public class TreeSet<E> extends AbstractSet<E> implements ...
- servlet的filter的使用
一.概述 过滤器是servlet的一个重要特性,它提供一种机制,允许在过滤器中,即可以修改浏览器的请求信息,也可以对服务器处理后的响应信息进行修改. 一个过滤器是一个实现了Filter接口的java类 ...