今天接到一个任务,要求app和app之间可以通信,然后就学习了一下Android 进程间通信实现原理,在这里和大家一起学习和分享一下。
Android Service分为两种:
1.本地服务(Local Service): 同一个apk内被调用
2.远程服务(Remote Service):被另一个apk调用(远程服务需要借助AIDL来完成)
首先介绍一下AIDL是什么东东:
AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。AIDL IPC机制是面向接口的,像COM或Corba一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。
AIDL 的作用:
由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。通过代码来实现这个数据传输过程是冗长乏味的,Android提供AIDL工具来处理这项工作。
选择AIDL的使用场合
官方文档特别提醒我们何时使用AIDL是必要的:只有你允许客户端从不同的应用程序为了进程间的通信而去访问你的service,以及想在你的service处理多线程。如果不需要进行不同应用程序间的并发通信(IPC),you should create your interface by implementing a Binder;或者你想进行IPC,但不需要处理多线程的,则implement your interface using a Messenger。无论如何,在使用AIDL前,必须要理解如何绑定service——bindService。
下面给大家推荐一个例子,这个例子来自:http://www.cnblogs.com/lonkiss/archive/2012/10/23/2735548.html
估计大家看完这个例子并且结合我上面说的概念就基本知道了怎么解决Android进程间的通信实现,通过AIDL是一个很好的解决方案。后面我会给大家介绍进程间的通信原理分析。