Android随笔-IPC

概述

IPC全程Inter-Process Communication,跨进程通信,指的是两个进程之间进行数据交换的过程。IPC并不是Android独有的,每一个操作系统需要有相应的IPC机制,比如Windows的剪切板、Linux的管道等。

分类

Android中IPC方式常用的有6种:
在这里插入图片描述

  • Bundle
    Bundle实现了Android特有序列化Parcelable接口,传输效率很快,更方便在Android进程中传递。Bundle或Intent在Activity,Service等四大组件中使用的最为频繁。

  • AIDL
    Android Interface Definition Language 简称AIDL。进程间通信可使用AIDL生成可序列化参数,然后会生成服务端对象的代理类,客户端通过生成的代理类调用服务端对象的方法。适用于跨进程且是并发访问的情况。
    创建.aidl文件后,AS会自动生成基于.aidl的IBinder接口,然后业务代码实现该接口,服务端向客户端公开接口,客户端远程调用公开的接口,验证AIDL通过后就可以通信了。
    AIDL支持Java基本数据类型、String、charSequence、ArrayList、HashMap和实现了Parcelable的对象,其中ArrayList和HashMap里面的元素也都需要是AIDL支持的类型。

  • Socket
    进程间通信,其中一方作为服务端,一方作为客户端,双方通过TCP或UDP进行通信。

  • Messager
    Messager是基于AIDL的一种跨进程的通信方式。

    1. Messager是通过Bundle传递数据的,所以支持的数据类型有限。
    2. Messager使用Bundle进行数据传递,所以传递的数据量有限,数据多的时候不建议使用。
    3. Messager不适用多任务并发的情况。
    4. Messager是异步的。
  • 文件共享
    文件共享即一个进程将数据写入指定的文件中,然后另一个进程需要数据就去读取指定的文件。并发读写可能会导数据无法同步问题,不适合多进程之间的通信,也不适合对数据同步要求高的通信。

  • ContentProvider
    ContentProvider作为Android的四大组件,适用于应用之间的通信。ContentProvider底层也是Binder,支持数据的增删改查,不仅适用于进程间的通信,也适用于进程内部的通信。

总结

类型优点缺点场景
Bundle简单易用数据类型有限四大组件间的通信
AIDL支持一对多并发,支持实时通信使用复杂,需要处理好数据同步问题一对多且可以远程调用服务
Socket功能强大,可网络传输,支持一对多并发实时通信使用繁琐网络数据交换
Messager支持一对多串行,支持实时通信,功能一般不支持远程调用另一个进程的服务,并发难以处理,只支持Bundle 支持的数据类型无并发,串行,且不是远程调用服务
文件共享简单不适合高并发,没有办法做到实时通信数据简单,实时性要求不高,没有并发
ContentProvider数据功能强大,支持一对多并发数据共享,且可以扩展侧重于数据的操作一对多进程之间的数据共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值