android binder机制详解

原创 2015年07月06日 23:29:44

摘要

Binder是android中一个很重要且很复杂的概念,它在系统的整体运作中发挥着极其重要的作用,不过本文并不打算从深层次分析Binder机制,有两点原因:1是目前网上已经有2篇很好的文章了,2是对Binder机制进行深入底层乃至驱动的分析这一过程相当困难且相当耗时,因此并不适合重复造轮子。本文的角度是对Android的Binder机制从整体和概念上进行分析,能够让大家很快明白到底什么是Binder,Binder是干什么的,Binder和应用开发的关系是什么,总之,这篇文章还是很值得去看一看的。

什么是Binder

1. 直观来说,Binder是Android中的一个类,它继承了IBinder接口

2. 从IPC角度来说,Binder是Android中的一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在linux中没有

3. 从Android Framework角度来说,Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager,etc)和相应ManagerService的桥梁

4. 从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当你bindService的时候,服务端会返回一个包含了服务端业务调用的Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或者数据,这里的服务包括普通服务和基于AIDL的服务

为什么Android内核要使用Binder

Android中有大量的CS(Client-Server)应用方式,这就要求Android内部提供IPC方法,而linux所支持的进程通信方式有两个问题:性能和安全性。

目前linux支持的IPC包括传统的管道,System V IPC(消息队列/共享内存/信号量),以及socket,但只有socket支持Client-Server的通信方式,由于socket是一套通用的网络通信方式,其传输效率低下切有很大的开销,比如socket的连接建立过程和中断连接过程都是有一定开销的。消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝过程。共享内存虽然无需拷贝,但控制复杂,难以使用。

在安全性方面,Android作为一个开放式,拥有众多开发者的的平台,应用程序的来源广泛,确保智能终端的安全是非常重要的。终端用户不希望从网上下载的程序在不知情的情况下偷窥隐私数据,连接无线网络,长期操作底层设备导致电池很快耗尽等等。传统IPC没有任何安全措施,完全依赖上层协议来确保。首先传统IPC的接收方无法获得对方进程可靠的UID/PID(用户ID/进程ID),从而无法鉴别对方身份。Android为每个安装好的应用程序分配了自己的UID,故进程的UID是鉴别进程身份的重要标志。使用传统IPC只能由用户在数据包里填入UID/PID,但这样不可靠,容易被恶意程序利用。可靠的身份标记只有由IPC机制本身在内核中添加。其次传统IPC访问接入点是开放的,无法建立私有通道。比如命名管道的名称,system V的键值,socket的ip地址或文件名都是开放的,只要知道这些接入点的程序都可以和对端建立连接,不管怎样都无法阻止恶意程序通过猜测接收方地址获得连接。

基于以上原因,Android需要建立一套新的IPC机制来满足系统对通信方式,传输性能和安全性的要求,这就是Binder。Binder基于 Client-Server通信模式,传输过程只需一次拷贝,为发送发添加UID/PID身份,既支持实名Binder也支持匿名Binder,安全性高。下图为Binder通信过程示例:

参考:

1. http://www.cnblogs.com/innost/archive/2011/01/09/1931456.html

2. http://blog.csdn.net/universus/article/details/6211589


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

android binder机制详解

本文转载地址:http://blog.csdn.net/universus/article/details/6211589 关键词 Binder Android IPC Linux 内核 驱动...

Android FrameWork——Binder机制详解(1)

原文地址::http://blog.csdn.net/stonecao/article/details/6657438     1.前面我曾经发表过一篇blog介绍了aidl实现机制(aid...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Android FrameWork——Binder机制详解(2)

6.前面5个段落我主要说明了BinderProxy是如何把数据发送出去的,Ok,那么接下来,我们肯定想要知道服务端是怎么接收数据并传递给相应的BBinder进行处理的,有没有注意到前面waitForR...

Android的IPC机制Binder的详解(转发)

第一部分 Binder的组成 1.1 驱动程序部分驱动程序的部分在以下的文件夹中:Java代码  kernel/include/linux/binder.h    kernel/drive...
  • sdhjob
  • sdhjob
  • 2011-01-04 19:19
  • 1371

图文详解 Android Binder跨进程通信机制 原理

前言 如果你接触过 跨进程通信 (IPC),那么你对Binder一定不陌生 虽然 网上有很多介绍 Binder的文章,可是存在一些问题:浅显的讨论Binder机制 或 一味讲解 Binder源码、逻辑...

android进程通信IPC机制之Binder详解

Android Binder机制原理(史上最强理解,没有之一) 2015-07-23 14:07 37876人阅读 评论(10) 收藏 举报 本文章已收录于: ...

Android的IPC机制Binder的详解汇总

转:http://java-admin.iteye.com/blog/717888 第一部分 Binder的组成  1.1 驱动程序部分驱动程序的部分在以下的文件夹中: ...

Android FrameWork——Binder机制详解(1)

1.前面我曾经发表过一篇blog介绍了aidl实现机制(aidl实现机制浅析),不过那只是停留在java表层,并遗留了一个,那就是BinderProxy.transact 该方法本地化实现,同时我指出...

Android IPC机制——Binder详解

IPC是指Android中的进程间通信,即在不同进程之间传递消息数据,Android中可实现进程通信的方法有很多,比如Intent、ContentProvider、Messenger、Binder或是...
  • Mr_Sk
  • Mr_Sk
  • 2016-02-25 22:33
  • 614
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)