Android进程间通信(IPC)机制Binder简介和学习计划
在Android系统,每个应用程序是由多个Activity和Service部件,这些Activity和Service有可能在相同的处理被执行,此外,还可以在不同的过程中进行。
然后。不是在同一个过程Activity或者Service是怎样通信的呢?这就是本文中要介绍的Binder进程间通信机制了。
我们知道,Android系统是基于Linux内核的,而Linux内核继承和兼容了丰富的Unix系统进程间通信(IPC)机制。
有传统的管道(Pipe)、信号(Signal)和跟踪(Trace)。这三项通信手段仅仅能用于父进程与子进程之间,或者兄弟进程之间。后来又添加了命令管道(Named Pipe)。使得进程间通信不再局限于父子进程或者兄弟进程之间;为了更好地支持商业应用中的事务处理,在AT&T的Unix系统V中。又添加了三种称为“System V IPC”的进程间通信机制。各自是报文队列(Message)、共享内存(Share Memory)和信号量(Semaphore)。后来BSD Unix对“System V IPC”机制进行了重要的扩充。提供了一种称为插口(Socket)的进程间通信机制。若想进一步具体了解这些进程间通信机制,建议參考Android学习启动篇一文中提到《Linux内核源码情景分析》一书。
可是。Android系统没有採用上述提到的各种进程间通信机制。而是採用Binder机制,难道是由于考虑到了移动设备硬件性能较差、内存较低的特点?不得而知。
Binder事实上也不是Android提出来的一套新的进程间通信机制。它是基于OpenBinder来实现的。OpenBinder最先是由Be Inc.开发的,接着Palm Inc.也跟着使用。如今OpenBinder的作者Dianne Hackborn就是在Google工作。负责Android平台的开发工作。
前面一再提到,Binder是一种进程间通信机制,它是一种相似于COM和CORBA分布式组件架构,通俗一点,事实上是提供远程过程调用(RPC)功能。从英文字面上意思看,Binder具有粘结剂的意思,那么它把什么东西粘结在一起呢?在Android系统的Binder机制中。由一系统组件组成,各自是Client、Server、Service Manager和Binder驱动程序,当中Client、Server和Service Manager执行在用户空间,Binder驱动程序执行内核空间。Binder就是一种把这四个组件粘合在一起的粘结剂了,当中。核心组件便是Binder驱动程序了,Service Manager提供了辅助管理的功能。Client和Server正是在Binder驱动和Service Manager提供的基础设施上,进行Client-Server之间的通信。
Service Manager和Binder驱动已经在Android平台中实现好,开发人员仅仅要依照规范实现自己的Client和Server组件就行了。说起来简单,做起难,对刚開始学习的人来说,Android系统的Binder机制是最难理解的了,而Binder机制不管从系统开发还是应用开发的角度来看。都是Android系统中最重要的组成。因此。非常有必要深入了解Binder的工作方式。要深入了解Binder的工作方式,最好的方式莫过于是阅读Binder相关的源码了,Linux的鼻祖Linus Torvalds以前曰过一句名言RTFSC:Read The Fucking Source Code。
虽说阅读Binder的源码是学习Binder机制的最好的方式。可是也绝不能打无准备之仗,由于Binder的相关源码是比較枯燥无味并且比較难以理解的,假设可以辅予一些理论知识,那就更好了。闲话少说,网上关于Binder机制的资料还是不少的,这里就不想再具体写一遍了。强烈推荐以下两篇文章:
Android深入浅出之Binder机制一文从情景出发。深入地介绍了Binder在用户空间的三个组件Client、Server和Service Manager的相互关系。Android Binder设计与实现一文则是具体地介绍了内核空间的Binder驱动程序的数据结构和设计原理。非常感谢这两位作者给我们带来这么好的Binder学习资料。总结一下。Android系统Binder机制中的四个组件Client、Server、Service Manager和Binder驱动程序的关系例如以下图所看到的:

1. Client、Server和Service Manager实如今用户空间中,Binder驱动程序实如今内核空间中
2. Binder驱动程序和Service Manager在Android平台中已经实现。开发人员仅仅须要在用户空间实现自己的Client和Server
3. Binder驱动程序提供设备文件/dev/binder与用户空间交互,Client、Server和Service Manager通过open和ioctl文件操作函数与Binder驱动程序进行通信
4. Client和Server之间的进程间通信通过Binder驱动程序间接实现
5. Service Manager是一个守护进程。用来管理Server,并向Client提供查询Server接口的能力
至此。对Binder机制总算是有了一个感性的认识,但仍然感到不能非常好地从上到下贯穿整个IPC通信过程,于是。打算通过以下四个情景来分析Binder源码,以进一步理解Binder机制:
1. Service Manager是怎样成为一个守护进程的?即Service Manager是怎样告知Binder驱动程序它是Binder机制的上下文管理者。
2. Server和Client是怎样获得Service Manager接口的?即defaultServiceManager接口是怎样实现的。
4 Service Manager是怎样为Client提供服务的?即IServiceManager::getService接口是怎样实现的。
在接下来的四篇文章中,将依照这四个情景来分析Binder源码。都将会涉及到用户空间到内核空间的Binder相关源码。
这里为什么没有Client和Server是怎样进行进程间通信的情景呢? 这是由于Service Manager在作为守护进程的同一时候,它也充当Server角色。
因此。仅仅要我们可以理解第三和第四个情景,也就理解了Binder机制中Client和Server是怎样通过Binder驱动程序进行进程间通信的了。
为了方便描写叙述Android系统进程间通信Binder机制的原理和实现。在接下来的四篇文章中,我们都是基于C/C++语言来介绍Binder机制的实现的,可是,我们在Android系统开发应用程序时。都是基于Java语言的,因此。我们会在最后一篇文章中。具体介绍Android系统进程间通信Binder机制在应用程序框架层的Java接口实现:
5. Android系统进程间通信Binder机制在应用程序框架层的Java接口源码分析。
新浪微博罗:http://weibo.com/shengyangluo,欢迎关注!
Android进程间通信(IPC)机制Binder简介和学习计划的更多相关文章
- [置顶] 深入理解android之IPC机制与Binder框架
[android之IPC机制与Binder框架] [Binder框架.Parcel.Proxy-Stub以及AIDL] Abstract [每个平台都会有自己一套跨进程的IPC机制,让不同进程里的两个 ...
- Android资源管理框架(Asset Manager)简介和学习计划
Android该应用程序包括两个部分组成的:代码和资源. 资源主要是与UI相关的东西,例如UI布局.和其他字符串和照片.代码和资源可以使独立的应用程序来组织的实际需求的基础上,在执行的时候UI.,就能 ...
- Android IPC机制—Binder的工作机制
进程和线程的关系 IPC机制即为跨进程通信,是inter-Process Communication的缩写.是指两个进程之间进行通信.在说进程通信之前,我们的弄明白什么是线程,什么是进程.进程和线程是 ...
- [转]Android进程间通信--消息机制及IPC机制实现
Android为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Servi ...
- Android之IPC机制
Android IPC简介 任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来实现IPC,还 ...
- IPC机制--Binder
文章来自 Android技术内幕 系统卷 转:http://www.linuxidc.com/Linux/2011-08/40508.htm 什么是IPC机制以及IPC机制的种类 在Linux中,是以 ...
- Android的IPC机制(一)——AIDL的使用
综述 IPC(interprocess communication)是指进程间通信,也就是在两个进程间进行数据交互.不同的操作系统都有他们自己的一套IPC机制.例如在Linux操作系统中可以通过管道. ...
- Anciroid的IPC机制-Binder概述
在Linux系统中,是以进程为单位分配和管理资源的.出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭.但是,在一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项 ...
- Android进程间通信IPC
一.IPC的说明 IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程. IPC不是Android独有的,任何一个操作 ...
随机推荐
- OpenJDK1.8.0 源码解析————HashMap的实现(一)
HashMap是Java Collection Framework 的重要成员之一.HashMap是基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,映射是以键值对的形式映射:key-v ...
- DLL五篇
http://www.cnblogs.com/NeuqUstcIim/archive/2009/01/12/1374511.htmlhttp://www.cnblogs.com/NeuqUstcIim ...
- VC调试篇
难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言.不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件. 我以前接触的程序大多是有比较成形的思路和方法,调试起来出 ...
- Python heapq 模块的实现 - A Geek's Page
Python heapq 模块的实现 - A Geek's Page Python heapq 模块的实现
- 对称加密算法DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES。
对称加密算法:DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES. 1.对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文 ...
- Dark Side of Cloud Storage —— 数据对像的分块消重
数据对像(可以通俗地认为是文件)的分块存储具有久远的历史.长久以来,单机文件系统一直将文件切分为若干固定大小的小块.其主要目的是为了进行有效的空间管理.互联网时代,大规模数据存储逐步发展起来.出于降低 ...
- Spring整合Jms学习(三)_MessageConverter介绍
1.4 消息转换器MessageConverter MessageConverter的作用主要有双方面,一方面它能够把我们的非标准化Message对象转换成我们的目标Message对象,这主要 ...
- HDU 4815 背包
标题的含义给出N问题.和概率P,然后给予相应的分数为每个问题x(每个问题只有两种选择,纠正错误). 两个人来回答.一个人是随机选择的答案,问:还有一个人的至少一些点的能力有保证P概率不会失败. 01背 ...
- tar.bz2解压
bzip2 -d gcc-4.1.0.tar.bz2 tar -xvf gcc-4.1.0.tar 或 tar -xvf *.tar
- 以todomvc为例分析knockout、backbone和angularjs
一.整体结构 项目github地址https://github.com/tastejs/todomvc/ 排除通用的css样式文件和引用的js库文件,仅看html和js 1.1 knockoutjs版 ...