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浅析的更多相关文章

  1. Android aidl Binder框架浅析

      转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38461079 ,本文出自[张鸿洋的博客] 1.概述 Binder能干什么?B ...

  2. Binder的工作原理浅析

    在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中Messenger的底层实现就是AIDL,所以我们这里通过AIDL来分析一下Binder的工作机制. ...

  3. 图文浅析Binder机制

    总述: Binder是Android系统提供的一种IPC机制,Android系统基本就可以看做基于Binder的C/S架构,Binder也是C/S形式出现,它属于驱动但是驱动的一段内存而不是设备,框架 ...

  4. ANDROID BINDER机制浅析

    Binder是Android上一种IPC机制,重要且较难理解.由于Linux上标准IPC在灵活和可靠性存在一定不足,Google基于OpenBinder的设计和构想实现了Binder. 本文只简单介绍 ...

  5. Android 进阶8:进程通信之 Binder 机制浅析

    读完本文你将了解: IBinder Binder Binder 通信机制 Binder 驱动 Service Manager Binder 机制跨进程通信流程 Binder 机制的优点 总结 Than ...

  6. Binder的工作机制浅析

    在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中Messenger的底层实现就是AIDL,所以我们这里通过AIDL来分析一下Binder的工作机制. ...

  7. Android Binder实现浅析-Binder驱动

    简介 Android是如何实现跨进程通信的,大家熟悉的Binder是什么,怎么设计的,进程间的数据如何发送接收的.本文将以及解析,并对Binder驱动实现.Native层实现.Java层实现三块做一个 ...

  8. Camera服务之--架构浅析

    Camera服务之--架构浅析 分类: Camera 分析2011-12-22 11:17 7685人阅读 评论(3) 收藏 举报 android硬件驱动框架jnilinux内核平台 一.应用层 Ca ...

  9. Android-Binder原理浅析

    Android-Binder原理浅析 学习自 <Android开发艺术探索> 写在前头 在上一章,我们简单的了解了一下Binder并且通过 AIDL完成了一个IPC的DEMO.你可能会好奇 ...

随机推荐

  1. HTML?这些还不懂咋办?

    1.什么是空白折叠现象?为什么要空白折叠呢? 对于我们大多数人的习惯来讲,大都喜欢利用空格或者换行来调整文章的文字结构.这样往往可以使我们可以更轻松的阅读.但是,在HTML中却不允许我们这么做,这是为 ...

  2. C#自定义规则对比两个集合的对象是否相等

    IList<获取的类> ret = 类的结果集; return ret.Except(另一个相同类型的对象列表集, new AClassComPare()): public class A ...

  3. Poj(2236),简单并查集

    题目链接:http://poj.org/problem?id=2236 思路很简单,傻逼的我输出写成了FALL,然后遍历的时候for循环写错了,还好很快我就Debug出来了. #include < ...

  4. python_4_interaction

    #1(方法1)尽量不用这种拼接法,效率低下,占用内存多 name=input("name:") age=input('age:') job=input('job:') salary ...

  5. Linux查看CPU和内存使用情况[转]

    在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...

  6. python3 安装turtle tkitnter 报错

    导入tkinter模块后,运行出现No module named _tkinter, please install the python-tk package ubuntu运行tkinter错误   ...

  7. maven简单了解,没有Maven和使用Maven的区别

    Maven提供了开发人员构建一个完整的生命周期框架.开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期.Maven让开发人员的工作更轻松,同时创建报表,检查,构建和 ...

  8. JavaEE权限管理系统的搭建(二)--------聚合工程项目的创建和依赖关系

    本项目是一个聚合工程,所以要先搭建一个聚合工程的框架 搭建完成的项目结构图如下: 首先创建父项目:pom类型 子模块:web层的搭建,war类型 把这个两个目录标记为对应的类型 其他子模块:和serv ...

  9. 激活SQLPrompt7.4及以上版本

    SQLPrompt是个很好的sql server提示工具,SQL-SERVER2016只能使用SQLPrompt7.x 以上版本,用激活工具激活后没多久就会检测到激活码不可用.所以感觉是不是有个服务在 ...

  10. UVA_1434_YAPTCHA

    The math department has been having problems lately. Due to immense amount of unsolicited automated ...