Android中的IPC方式及对比

IPC (Interprocess communication) 跨进程通信,是指在两个进程之间交换数据的过程。多进程通信一般分为两种情况。第一种,一个应用因为自身的需要采用多进程实现,比如某些模块由于特殊原因需要运行在单独的进程中。第二种情况,当前应用需要获得其它应用的数据,由于是两个应用,所以必须采用跨进程的方式。

有如下方法实现IPC:

(具体实现 google 即可)

一、使用Bundle

四大组件 Activity,Service,Receiver,Broadcast 都是支持在Intent中传递 Bundle 的,由于 Bundle 实现了 Parcelable 接口,所以他可以在不同进程间传输。我们可以在 Bundle 中附加数据,并通过 Intent 传送出去。当然,传送的数据必须是能够被序列化的。但是,仅能够传递 Bundle 支持的数据类型 – MAP,基本数据类型,基本数据类型数组,Parcelable 类型及 Parcelable 类型数组,Serializable 类型(无Serializable 类型数组),ArrayList。详见http://blog.csdn.net/qingye_love/article/details/13776049

二、使用文件共享

A 进程把数据写入文件,B进程通过读取这个文件来获得数据。但这这种方法有一个问题就是并发读/写问题。有一个特例,SharedPreferences 是 Android 中提供的轻量级存储方案,底层采用 XML 实现。但是对于他的读写有一定的缓存策略,多进程中不是很可靠,且不适用于高并发,因此不建议在进程间通信中使用他。

三、使用Messenger

Messenger 是一种轻量级的 IPC 方案,他的底层实现时 AIDL。他是以串行的方式处理客户端发来的消息的,一次处理一个请求,因此我们不考虑线程同步问题。其传递的是 Message 对象,可携带的字段 public int arg1 ,t arg2;public Object obj; public Messenger replyTo;public int what。

四、AIDL

这是最优的最常用的方式了,利用Service其大致的实现过程是这样的:
1. 建一个 AIDL 接口和 Service;
2. 创建类继承 AIDL 接口中的 Stub 类,并实现方法;
3. 在 Service 的 onBind 方法中返回2中类的对象,建立连接可访问方法。
这里涉及到 Binder 的工作过程,比较复杂,详见另一篇 Binder。注意,除了基本数据类,其他类型的参数都要标上方向:in、out 或者 inout 。

五、ContentProvider

ContentProvider 是 Android 中专门用于应用间进行数据共享的方式。底层使用的仍然是 AIDL,通过封装,给其他应用提供 CURD 接口。其他应用可通过 ContentResolver 访问本应用的数据。可以认为是阉割版的 AIDL 。

六、Socket

Socket 通常称为套接字,可理解为是一个双向的通信连接的 client,分为流式和用户数据报两种实现,即分别对 TCP 和 UDP 协议的封装,前者三次握手,稳定,后者更高效却不稳定。使用 Socket 可实现普通进程间通信、设备间通信(需IP相互可见)。关于网络见另一篇

对比

这里写图片描述


参考:
http://blog.csdn.net/gjnm820/article/details/51636182#
http://www.androidchina.net/4506.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值