在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机制

Android 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接口是怎样实现的。

3. Server是怎样把自己的服务启动起来的?Service Manager在Server启动的过程中是怎样为Server提供服务的?即IServiceManager::addService接口是怎样实现的。

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简介和学习计划的更多相关文章

  1. [置顶] 深入理解android之IPC机制与Binder框架

    [android之IPC机制与Binder框架] [Binder框架.Parcel.Proxy-Stub以及AIDL] Abstract [每个平台都会有自己一套跨进程的IPC机制,让不同进程里的两个 ...

  2. Android资源管理框架(Asset Manager)简介和学习计划

    Android该应用程序包括两个部分组成的:代码和资源. 资源主要是与UI相关的东西,例如UI布局.和其他字符串和照片.代码和资源可以使独立的应用程序来组织的实际需求的基础上,在执行的时候UI.,就能 ...

  3. Android IPC机制—Binder的工作机制

    进程和线程的关系 IPC机制即为跨进程通信,是inter-Process Communication的缩写.是指两个进程之间进行通信.在说进程通信之前,我们的弄明白什么是线程,什么是进程.进程和线程是 ...

  4. [转]Android进程间通信--消息机制及IPC机制实现

    Android为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Servi ...

  5. Android之IPC机制

    Android IPC简介 任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来实现IPC,还 ...

  6. IPC机制--Binder

    文章来自 Android技术内幕 系统卷 转:http://www.linuxidc.com/Linux/2011-08/40508.htm 什么是IPC机制以及IPC机制的种类 在Linux中,是以 ...

  7. Android的IPC机制(一)——AIDL的使用

    综述 IPC(interprocess communication)是指进程间通信,也就是在两个进程间进行数据交互.不同的操作系统都有他们自己的一套IPC机制.例如在Linux操作系统中可以通过管道. ...

  8. Anciroid的IPC机制-Binder概述

    在Linux系统中,是以进程为单位分配和管理资源的.出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭.但是,在一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项 ...

  9. Android进程间通信IPC

    一.IPC的说明 IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程. IPC不是Android独有的,任何一个操作 ...

随机推荐

  1. 如何利用Win32API取得另一支程式中的ListView內的所有值(RegisterHotKey,ReadProcessMemory,WindowFromPoint和VirtualAllocEx)

    http://blog.csdn.net/shuaihj/article/details/6129506

  2. 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室

    原文:与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  3. 使用SetUnhandledExceptionFilter转储程序崩溃时内存DMP注意事项

    使用代码手工生成dmp文件 SetUnhandledExceptionFilter 为每个线程设置SetUnhandledExceptionFilter(MyCallBack),(必须在每个线程中启动 ...

  4. Disqus – About Disqus

    Disqus – About Disqus   Disqus is a free service that enables great online communities. As the web's ...

  5. hibernate学习(二)

    hibernate 单向一对多映射 一.数据表设计 数据库名:hibernate5 数据表: ①表名:CUSTOMERS 字段: CUSTOMER_ID  CUSTOMER_NAME ②表名:ORDE ...

  6. 深刻:截获windows的消息并分析实例(DefWindowProc),以WM_NCHITTEST举例(Windows下每一个鼠标消息都是由 WM_NCHITTEST 消息产生的,这个消息的参数包含了鼠标位置的信息)

    1,回调函数工作机制 回调函数由操作系统自动调用,回调函数的返回值当然也是返回给操作系统了. 2,截获操作系统发出的消息,截获到后,将另外一个消息返回给操作系统,已达到欺骗操作系统的目的. 下面还是以 ...

  7. 图像编程学习笔记1——bmp文件结构处理与显示

    文本内容转载自<数字图像处理编程入门>,代码为自己实现 1.1图和调色板的概念 如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个 ...

  8. Maven聚合

    <project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2 ...

  9. DS Scheduler 0.7 发布,Linux 调度系统 - 开源中国社区

    DS Scheduler 0.7 发布,Linux 调度系统 - 开源中国社区 DS Scheduler 0.7 发布,Linux 调度系统

  10. 事务应用-运行多条SQL语句

    事务具有原子性,要么不运行,要么全运行,一旦成功运行永久保存.而这些正是因为事务的原子性和对数据库的持久性形成的.下面是一个关于统一给数据库中的数据改动的批量操作,利用到事务. TODO:批量改动数据 ...