跨进程通信(IPC)方式
-
Bundle实现了Parcelable接口
- 优点:简单易用
- 缺点:只能传递Bundle支持的数据类型
- 使用场景:四大组件间的进程通讯
-
文件共享
- 优点:简单易用
- 缺点:不适合高并发的场景,不能做到即使通讯
- 使用场景:无并发访问的情景,简单的交换数据,实时性要求不高
-
AIDL
- 优点:功能强大,支持一对多并发通讯,支持实时通信
- 缺点:一定要处理好线程同步的问题
- 使用场景:一对多进行通讯,有RPC(远程过程调用协议)的需求
-
Message
- 优点:功能一般,支持一对多串行通讯,支持实时通信
- 缺点:不能更好的处理高并发场景,不支持RPC,数据通过Message进行传输,因此只能支持Bundle支持的数据类型
- 使用场景:低并发的一对多的实时通讯,没有RPC的需求或者说没有返回结果的RPC
-
ContentProvider
- 优点:主要用于数据访问,支持一对多的并发数据共享
- 缺点:受约束,主要支队数据源的曾删改查
- 使用场景:一对多的数据共享
-
Socket(套接字)
- 优点:功能强大,通过读写网络传输字节流,支持一对多的并打的实时通讯
- 缺点:不支持直接的RPC
- 使用场景:万络数据的交换
-
BroadcastReceiver
- 优点:操作简单,支持一对多实时通信
- 缺点:只支持数据单向传递,效率低且安全性不高
- 使用场景:一对多的低频单向通信
Binder机制
-
简介
- AIDL,Messenger,Socket,ContentProvider这些机制底层全部都是用了Binder机制来实现进程间通信
-
为何新增Binder作为主要的IPC方式
- Binder是Android系统中的一种IPC进程间通信结构,使用了mmap,内存映射机制
- Binder的整个设计时C/S结构,客户端进程通过获取服务端进程的代理,并通过向这个代理接口方法中读写数据来完成进程间的数据通信
-
Android之所以选择Binder,有2个方面原因
- 安全,每个进程都会被Android系统分配UID和PID,不想传统的在数据里加入UID,这就让那些恶意进程无法直接和其他进程通信,进程间通信的安全性得到提升
- 高效,像Socket之类的IPC每次数据拷贝都需要2次,而Binder只需要一次,在手机上这种资源紧张的情况下很重要