- 浏览: 367123 次
- 性别:
- 来自: 帝都
文章分类
最新评论
-
born19930314:
你好,请问还在吗?我的targetObject中由于含有无法序 ...
Quartz集群配置(100%成功) -
stone_yw:
想问一下,如果quartz只有一个任务,但是这个任务的执行时间 ...
Quartz集群配置(100%成功) -
yandype:
mzxueyun 写道 ERROR c.t.k.m.biz.M ...
Quartz集群配置(100%成功) -
x123456789a:
...
Quartz集群配置(100%成功) -
knight_black_bob:
startjava.io.IOException: Conne ...
TFTP的文件管理
在Android系统中,每一个应用程序都是由一些Activity和Service组成的,一般Service运行在独立的进程中,而Activity有可能运行在同一个进程中,也有可能运行在不同的进程中。那么,不在同一个进程的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机制http://www.cnblogs.com/innost/archive/2011/01/09/1931456.html
Android Binder设计与实现 – 设计篇http://disanji.net/2011/02/28/android-bnder-design/
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://blog.csdn.net/Luoshengyang
自定义service参考http://blog.csdn.net/xieqibao/article/details/6585143
我们知道,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机制http://www.cnblogs.com/innost/archive/2011/01/09/1931456.html
Android Binder设计与实现 – 设计篇http://disanji.net/2011/02/28/android-bnder-design/
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://blog.csdn.net/Luoshengyang
自定义service参考http://blog.csdn.net/xieqibao/article/details/6585143
发表评论
-
安卓CMD
2012-06-02 18:02 1212引用Android系统中的“CMD”,用命令行管理你的手机。 ... -
Android的静态注册广播问题
2012-05-29 15:26 4177引用 2. Static registering The ad ... -
Android ListView 显示Drawable对象
2012-05-17 14:37 1074http://www.cnblogs.com/thu539/a ... -
Android 开启WIFI 广播接收
2012-05-16 09:21 2077WifiManager wifiManager = (Wi ... -
Android Activity Task
2012-05-11 11:12 952引用A task is a collection of act ... -
Android Binder机制,虚拟机
2012-05-08 10:29 1470http://blog.csdn.net/luoshengya ... -
Android流量统计
2012-05-03 11:06 1545static long getMobileRxBytes ... -
Andriod WIFI模块
2012-03-30 09:53 773http://blog.163.com/wxiongn@126 ... -
Android Service相关
2012-03-26 14:22 873http://developer.android.com/re ... -
Android应用程序设计策略
2012-03-23 16:28 1142一个成功的Android应用程序往往提供一个突出的用户体验。当 ... -
sqlite工具类
2012-03-22 15:00 6156package com.asc.db; import ... -
ksoap2实现webservice工具类
2012-03-22 14:58 4032package com.ksoaptest.util; ... -
ProgressBar教程
2012-03-21 11:39 949http://blog.csdn.net/Android_Tu ... -
Android webservice
2012-02-21 09:24 0http://blog.csdn.net/kangkangz4 ... -
sina 微博异步调用API
2011-12-30 09:00 1592AsyncWeiboRunner public clas ... -
Android 反编译
2011-12-14 17:39 867http://blog.csdn.net/sunboy_205 ... -
Android 权限相关问题
2011-12-13 19:59 2936ServiceMananger管理Service需要Syste ... -
Binding with unknown activity
2011-12-08 11:45 1261在TabActivity中bindservice时报错: ... -
Android Handler线程间通信机制分析
2011-12-06 19:50 2173Looper: 循环处理消息队列 //用法: cl ... -
Android相关工具地址
2011-12-02 21:40 819SDK: http://developer.android. ...
相关推荐
Android进程间通信(IPC)机制Binder简要介绍和学习计划
Binder是一种高效的IPC机制,它被广泛应用于Android系统内部的服务通信和进程间通信。 #### 为什么Android选择了Binder? 1. **高效性**:相比其他IPC机制,Binder具有更低的内存占用和更快的速度,尤其适合移动...
### Android进程间通信(IPC)机制Binder守护进程之路 #### 一、概述 在上一篇文章中,我们简要介绍了Android系统中的进程间通信(IPC)机制Binder及其整体架构。Binder机制由四大核心组件构成:客户端(Client)、...
Binder机制是Android独有的IPC方式,它不同于传统的Unix/Linux进程间通信机制,如管道、信号、共享内存等,而是基于OpenBinder实现的分布式组件架构,提供了类似于远程过程调用(RPC)的功能。 **一、Binder机制...
总结来说,《Android IPC与Binder框架》是一本全面解析Android进程间通信机制和Binder核心技术的书籍,适合有一定Android开发经验的工程师深入学习和研究。通过阅读这本书,开发者不仅能了解Android IPC的各种实现...
### Android进程间通信——Binder机制 #### 一、简要介绍和学习计划 在Android操作系统中,每一个应用程序通常由多个组件如Activity和服务(Service)组成。这些组件可能运行在同一进程中,也可能分布在不同进程中。...
**Android进程间通信(IPC):AIDL详解** 在Android系统中,进程间通信(IPC,Inter-Process Communication)是应用程序之间数据交换的关键技术。AIDL(Android Interface Definition Language)是Android提供的一...
Android进程间通信(IPC)机制的核心是Binder,它是一种高效且安全的通信方式,尤其适合移动设备资源有限的环境。Binder并非Android独有的创新,而是基于OpenBinder,最初由Be Inc.开发,后来被Palm Inc.采纳,最终...
在前面一篇文章浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路中,介绍了Service Manager... 在阅读本文之前,希望读者先阅读Android进程间通信(IPC)机制Binder简要介绍和学习计划一文提到
在Android系统中,进程间通信(IPC,Inter-Process Communication)是实现不同应用程序之间数据交换的关键技术。AIDL(Android Interface Definition Language)是Android提供的一种强大的工具,它使得跨进程调用...
在Android系统中,进程间通信(Inter-Process Communication, 简称IPC)是一种关键机制,使得不同应用程序或同一程序的不同进程之间能够共享数据、调用服务等。本示例"android 进程间通信demo"专注于讲解如何利用...
在Android系统中,进程间通信(IPC,Inter-Process Communication)是实现不同应用程序组件之间协作的关键技术。本文将深入探讨Android中的Binder机制及其驱动原理,以及AIDL(Android Interface Definition ...
在Android系统中,Binder是实现进程间通信(IPC,Inter-Process Communication)的关键技术,它是Android系统服务和应用程序之间交互的主要方式。深入理解Binder机制对于Android应用开发尤其是系统级服务开发至关...
### 进程间通信(IPC)与Android中的Binder机制 #### IPC的重要性与场景 进程间通信(Inter-Process Communication,简称IPC)是操作系统中的一个重要概念,尤其在Android系统中,由于其基于Linux内核,因此默认...
总结,Android的IPC机制提供了多种方式实现进程间通信,如Binder、Messenger和AIDL。本Demo主要展示了使用Messenger和AIDL这两种方式,通过实际操作可以加深对Android IPC的理解。对于更复杂的跨进程通信需求,...
总结,这个示例“android进程间通信测试代码”展示了如何在Android中不依赖AIDL,通过Parcel实现简单数据类型的进程间通信。理解并熟练掌握这种通信方式,对于开发高效且可靠的Android应用至关重要。
本教程将深入讲解AIDL的使用和其在Android进程间通信中的应用。 首先,我们要理解什么是AIDL。AIDL实际上是一种接口定义语言,类似于Java中的接口,但它的目的是让不同的Android进程之间能够调用彼此的方法。当一个...
在Android系统中,进程间通信(IPC,Inter-Process Communication)是实现不同应用程序之间数据交换的关键技术。Android Aidl(Android Interface Definition Language)是Android提供的一种强大的IPC机制,它允许两...