在Android系统中,每一个应用程序都是由一些Activity(前台活动界面)和Service(后台服务)组成的,一般Service运行在独立的进程中,而Activity可能运行在同一个进程中,也有可能运行在不同的进程中。众所周知,Android系统是基于Linux内核的,而Linux内核继承和兼容了丰富的UNIX系统进程间通信(IPC)机制。传统的管道(Pipe)、信号(Signal)和跟踪(Trace),这三项通信手段只能用于父进程和子进程之间,或者只用于兄弟进程之间。随着技术的发展,后来又增加了命名管道(Named Pipe),这样使得进程之间的通信不再局限于父子进程或者兄弟进程之间。为了更好地支持商业应用中的事务处理,在AT&T的UNIX系统V中,又增加了如下三种称为“System V IPC”的进程间通信机制:
报文队列(Message)
共享内存(Share Memory)
信号量(Semaphore)
Android系统没有采用上述提到的各种进程间通信机制,而是采用Binder(绑定)机制。其实Binder并不是Android系统创造,它是基于OpenBinder来实现的。Binder是一种进程间通信机制,这是一种类似于COM和CORBA(通用对象请求代理体系结构)的分布式组件架构。具体来说,其实是提供了远程过程调用(RPC)功能。
在Android系统中,Binder机制由Client(客户端)、Server(服务端)、Service Manager(服务管理)和Binder驱动程序等一系统组件组成。其中Client、Server和Service Manager运行在用户空间,Binder驱动程序运行在内核空间,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相关的源代码。
要想深入理解Binder机制,必须了解Binder在用户空间的三个组件Client、Server和Service Manager之间的相互关系,并了解内核空间中Binder驱动程序的数据结构和设计原理。具体来说,Android系统Binder机制中的四个组件Client、Server、Service Manager和Binder驱动程序的关系如图3-1所示。
(www.daowen.com)
图3-1 组件Client、Server、Service Manager和Binder驱动程序的关系
图3-1中所示关系的具体说明如下。
(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接口的功能。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。