1.Binder机制
进程间通信英文缩写为IPC。Linux系统中进程间通信的方式有:socket, named pipe,message queque, signal,share memory。Java系统中的进程间通信方式有socket, named pipe等。Android采用的是Binder通信。
Google为什么要采用这种方式呢,这取决于Binder通信方式的高效率。 Binder通信是通过linux的binder driver来实现的,Binder通信操作类似线程迁移(thread migration),两个进程间IPC看起来就象是一个进程进入另一个进程执行代码然后带着执行的结果返回。Binder的用户空间为每一个进程维护着一个可用的线程池,线程池用于处理到来的IPC以及执行进程本地消息,Binder通信是同步而不是异步。 Android中的Binder通信是基于Service与Client的,所有需要IBinder通信的进程都必须创建一个IBinder接口。关于Binder机制的深入理解以及其具体实现可参考Simon的博客,地址是http://my.unix-center.net/~Simon_fu/,在博客中搜索“binder”关键字即可找到。
2.AIDL
为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。http://developer.android.com/guide/developing/tools/aidl.html,这是谷歌SDK文档中关于AIDL的描述。Braincol对其进行了翻译,详见http://www.cnblogs.com/hibraincol/archive/2011/09/06/2169325.html。感谢他的工作!
3.Android的进程间通信的使用
3.1在应用层建立AIDL服务
对用户程序来说,我们也要创建server,或者Service用于进程间通信,这里有一个ActivityManagerService管理JAVA应用层所有的service创建与连接(connect),disconnect,所有的Activity也是通过这个service来启动,加载的。ActivityManagerService也是加载在Systems Servcie中的。
在应用层建立AIDL服务要比建立普通的服务复杂一些,具体步骤如下:
(1)在Eclipse Android工程的Java包目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。详细介绍见实例的内容。
(2)如果aidl文件的内容是正确的,ADT会自动生成一个Java接口文件(*.java)。
(3)建立一个服务类(Service的子类)。
(4)实现由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类的参数值。
3.2在框架层增加系统服务
系统中有一个进程管理所有的system service,Android不允许用户添加非授权的System service,当然现在源码开放了,我们可以修改一些代码来达到添加底层system Service的目的。可以参照Android代码树中的系统服务源码实现,需要注意的是系统服务的实现方式和应用层AIDL服务的实现方式稍有差别。具体的实现可以参考http://www.android1.net/Topic.aspx?BoardID=21&TopicID=990,这是台湾高焕堂先生发的一个帖子。高先生的Android造诣很高,应该多向他学习。
分享到:
相关推荐
Android 使用Socket完成进程间通信,服务器段和客户端。
android使用aidl实现进程间通信,而且是双向通信
Android使用AIDL实现进程间通信
一个简单的进程间通信
Android 利用Service进行进程间通信,bindService
Android 进程间通信AIDL demo 博客地址:http://blog.csdn.net/bigboysunshine/article/details/70228223
andorid 不同进程间的通信, uses the aidl to comple the demo,hope you can learn ,and give me you idear .
Android 进程间通信机制 (Binder) 介绍
Messenger进程间通信,包括Service服务端代码和客户端代码;进程内部通信/进程间通信并且应答;
android 进程间通信分析 android 进程间通信分析
Android进程间通信Demo,16是Android进程间普通的通信,17是进程间对象的传递。
Android进程间通信的Demo,从手机端Client发送消息到PC Server端,注意修改IP地址,统一端口号
Android进程间通信(IPC)机制Binder简要介绍和学习计划
Android进程间通信AIDL技术讲解
你知道你需要进程间通信、需要AIDL(以及Binder),那么可以默认你对这些概念已经有了一些了解,你(大致)知道它们是什么,它们有什么用,所以为了节约大家的眼力和时间,在此我不复制粘贴网上泛滥的博客或者翻译...
【一图流】_02_一张图看懂 Android 进程间通信(IPC)Binder机制: 此图表述了Android系统_进程间通信(IPC)机制全部体系,其中重点放在 Android系统中 重用 的 Binder机制 上,详尽细致,希望对大家有用;
总结:跨进程访问Activity(访问其他应用程序中的Activity)主要是通过一个Action来完成的,如果要传递数据,还需要指定一个Uri。当然,传递数据也可以通过Intent来完成。传递数据的过程可以是双向的。如果要想从...
Android进程间通信文档 PDF文档
android根据不同任务创建不同进程,并通过AIDL进行进程间通信
Android aidl 实现进程间通信(IPC)