前言
经过半个月的学习,目前我对Android IPC机制有了更全面的理解。结合《Android开发艺术探索》,在这里做个总结
IPC方式1:Messenger实战IPC方式2:AIDL实战IPC方式3:ContentProvider实战AIDL配合Binder连接池实战Binder原理学习
1.IPC方式有哪些
①Bundle
②AIDL
③Messenger
④ContentProvider
⑤文件共享
⑥socket
2.使用场景
①Bundle
四大组件间的进程间通信
②AIDL
一对多通信,并发通信,有RPC需求
③Messenger
一对多通信,服务端不存在并发执行的情景(即多进程单线程),无RPC需求或者无需要返回结果的RPC需求
④ContentProvider
一对多通信,并发通信,有RPC需求
⑤文件共享
无并发,适用于交换简单的数据实时性不高的情景
⑥socket
网络数据交换
3.各个的优点
①Bundle
简单易用
②AIDL
支持一对多并发通信,支持实时通信
③Messenger
支持一对多串行通信,使用起来比AIDL简单
④ContentProvider
受约束的AIDL,支持一对多并发通信,提供了统一的uri与统一的接口,方便通信
⑤文件共享
简单易用
⑥socket
支持一对多并发通信,支持实时通信
4.各个的缺点
①Bundle
只能传输Bundle支持的数据类型
②AIDL
使用复杂,需处理线程同步
③Messenger
不支持并发,不支持RPC,只能传输Bundle支持的类型
④ContentProvider
一般只提供CRUD操作
⑤文件共享
不支持并发,无法实时通信
⑥socket
使用复杂
5.一表总结
名称 | 优点 | 缺点 | 适用场景 |
Bundle | 简单易用 | 只能传输Bundle支持的数据类型 | 四大组件间的进程间通信 |
AIDL | 支持一对多并发通信,支持实时通信 | 使用复杂,需处理线程同步 | 一对多通信,并发通信,有RPC需求 |
Messenger | 支持一对多串行通信,使用起来比AIDL简单 | 不支持并发,不支持RPC,只能传输Bundle支持的类型 | 一对多通信,服务端不存在并发执行的情景(即多进程单线程),无RPC需求或者无需要返回结果的RPC需求 |
ContentProvider | 受约束的AIDL,支持一对多并发通信,提供了统一的uri与统一的接口,方便通信 | 一般只提供CRUD操作 | 一对多通信,并发通信,有RPC需求 |
文件共享 | 简单易用 | 不支持并发,无法实时通信 | 无并发,适用于交换简单的数据实时性不高的情景 |
socket | 支持一对多并发通信,支持实时通信 | 使用复杂 | 网络数据交换 |