BInder浅析
Binder是什么
Binder是运行在Android内核态用于进程间通信(IPC)的驱动,采用C/S架构,由三项基本组件组成:Binder服务端,Binder驱动,应用程序客户端。
为什么要用Binder
Android需要为运行中的不同的进程提供全局的服务,使进程之间能相互通信。
Binder的运作机制
Binder的三个组件:Binder服务端,Binder驱动,应用程序客户端。Binder服务端代码级表现为一个继承Binder的类(重载onTransact()),Binder驱动的代码级表现为一个mRemote对象(同样继承Binder类,重载transact()),mRemote在Binder服务端与应用程序客户端之间中转。
Binder的远方服务端为所有应用进程提供全局服务,它维护一个隐藏的线程(初始化对象时即创建),该线程接收Binder驱动发送过来的消息,将参数传给onTransact(),由onTransact()处理请求,并且返回数据,实现Binder时,需要将onTransact()重载以提供处理代码。
onTransact(int code,Parcel data,Parcel reply,int flags)throw RemoteException{
//此处添加处理代码
return super.onTransacet(int code,Parcel data,Pacel reply,int flags);
}
问题1;Binder服务端如何知道客户端需要调用哪个服务,又到哪里找客户端传来的参数?
回答:code参数标示了客户端期望服务端调用的功能,data参数保存了客户端传过来的数据,客户端需要按顺序将参数存入data中,服务端也需要按顺序从data中读取数据。
问题2:Binder服务端如何返回数据?
回答:通过调用reply变量中相关函数往其写入数据即可,如果返回数据,flags参数必须为0,否则必须为1。
Binder驱动中的mRemote需要重载transact(),并且实现三件事:向服务端发送调用信息->挂起当前线程,等待服务端返回后恢复->返回服务端的结果。
客户端与服务端通信需要获得Binder驱动中的mRemote对象的引用,并且调用mRemote.transact(int code,Parcel data,Parcel reply,int flags)。原型如下:
public final boolean transact(int code,Parcel data,Parcel reply,int flags);
方法中各参数的意义与服务端的onTransact()方法中各参数一样。
Android SDK提供aidl工具生成代码重载transact()和onTransact()并统一传入data和读取data中参数的顺序。
------参考至《Android内核剖析》
BInder浅析的更多相关文章
- Android aidl Binder框架浅析
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38461079 ,本文出自[张鸿洋的博客] 1.概述 Binder能干什么?B ...
- Binder的工作原理浅析
在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中Messenger的底层实现就是AIDL,所以我们这里通过AIDL来分析一下Binder的工作机制. ...
- 图文浅析Binder机制
总述: Binder是Android系统提供的一种IPC机制,Android系统基本就可以看做基于Binder的C/S架构,Binder也是C/S形式出现,它属于驱动但是驱动的一段内存而不是设备,框架 ...
- ANDROID BINDER机制浅析
Binder是Android上一种IPC机制,重要且较难理解.由于Linux上标准IPC在灵活和可靠性存在一定不足,Google基于OpenBinder的设计和构想实现了Binder. 本文只简单介绍 ...
- Android 进阶8:进程通信之 Binder 机制浅析
读完本文你将了解: IBinder Binder Binder 通信机制 Binder 驱动 Service Manager Binder 机制跨进程通信流程 Binder 机制的优点 总结 Than ...
- Binder的工作机制浅析
在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中Messenger的底层实现就是AIDL,所以我们这里通过AIDL来分析一下Binder的工作机制. ...
- Android Binder实现浅析-Binder驱动
简介 Android是如何实现跨进程通信的,大家熟悉的Binder是什么,怎么设计的,进程间的数据如何发送接收的.本文将以及解析,并对Binder驱动实现.Native层实现.Java层实现三块做一个 ...
- Camera服务之--架构浅析
Camera服务之--架构浅析 分类: Camera 分析2011-12-22 11:17 7685人阅读 评论(3) 收藏 举报 android硬件驱动框架jnilinux内核平台 一.应用层 Ca ...
- Android-Binder原理浅析
Android-Binder原理浅析 学习自 <Android开发艺术探索> 写在前头 在上一章,我们简单的了解了一下Binder并且通过 AIDL完成了一个IPC的DEMO.你可能会好奇 ...
随机推荐
- 开源框架 epics,开源画面编辑软件 edm
epics Experimental Physics and Industrial Control System 一套开源软件框架,实验物理和工业控制系统 http://www.aps.anl.gov ...
- SAP S4CRM和C4C的技术比较
如果您对SAP S/4HANA for Customer Management(以下简称S4CRM)和SAP Cloud for Customer(以下简称C4C)不甚熟悉,那我建议您可以先浏览我之前 ...
- 5.2 Array类型
◆ 创建数组的基本方式有两种. ①第一种是使用Array构造函数,new关键字可省略 var colors = new Array(); var colors = new Array(20); // ...
- N76E003---看门狗
看门狗的设置 比较简单,根据芯片手册上的说明进行设置.值得一提的是设置看门狗的寄存器是保护寄存器,所以在写寄存器的时候要解除保护 void wtd_init(void) { TA=0xAA; TA=0 ...
- DOM——获取元素的方式
document.getElementById("id属性的值"): //可以通过元素的 id 来获取元素,返回的是一个元素对象 document.getElementByName ...
- 关于Linux部分版本无法安装Chrome的问题
在想要yum安装Chrome浏览器后发现安装没有相应的包,在查询后得知Chrome已经对Redhat和Centos等部分版本停止支持, 所以这些新版的系统中直接安装就显得有些困难了,那么从网上找到了一 ...
- 开发者不容错过的10款免费JavaScript游戏引擎
摘要:使用HTML5.JavaScript可以帮助开发者开发出各种与众不同的游戏及游戏特效,比如3D动画.Canvas等.本文介绍10款被广泛使用的基于HTML5的JavaScript游戏引擎. 在G ...
- C# grid控件用数据库分页后台怎么写?
C#grid控件使用数据库分页的写法如下: mySystem.GetDataa(gridName.PageIndex *gridName.PageSize + 1, (gridName.PageInd ...
- 【图论 思维】cf715B. Complete The Graph加强
zzq讲的杂题 题目大意 有一张$n$个点$m$条边的简单正权无向图,$S$到$T$的最短路为$L$,现在有一些边的边权未知,请输出任意一种满足题意的方案. $n,m\le 500000$ ...
- mysql架构和历史
存储引擎 查看: show table status like 'bigcourse'; 结果: +-----------+--------+---------+------------+------ ...