Android10_几种安卓IPC方式总结

 

名称 优点 缺点 适用场景
Bundle 简单易用 只能传输Bundle支持的数据类型  四大组件间的进程间通信
文件共享 简单易用 不适合高并发场景,无法做到即时通信

 无并发访问请教,

简单交换的数据实时性不高的场景

AIDL

功能强大,支持一对多并发通信,

支持实时通信

使用复杂些 一对多,RPC需求 
Messenger

功能一般,知识一对多串行通信,

支持实时通信

不能很好处理高并发清晰,数据同Message传输

只能传输Bundle支持的数据类型,不支持RPC

 低并发的一对多即时通信,

无RPC需求,或者无须要返回结果的

RPC需求

ContentProvider

在数据源访问方面功能强大,支持一对多

并发数据共享,可通过Call方法扩展其他操作

受约束的AIDL,主要提供数据源的CRUD操作 一对多的进程间数据共享
Socket

功能强大,可以通过网络传输字节流

支持一对多并发实时通信

实现细节稍微有点麻烦,不支持直接RPC 数据交换

============【AIDL相关链接】======================
AIDL给IPC用的;

是用于定义服务器和客户端通信接口的一种描述语言,可以拿来生成用于IPC的代码。

AIDL语言其实是为了避免我们重复编写代码而出现的一个模板。

Android studio 上使用aidl总结: https://blog.csdn.net/sawtear/article/details/51899794        //这个讲得不错,分析了stub

AIDL使用详解:https://www.jianshu.com/p/29999c1a93cd                                                   //讲得不错,有具体代码

AndroidStudio 使用AIDL:https://blog.csdn.net/u012532559/article/details/52764282        //简单介绍AIDL的使用

AIDL的使用、传递复杂对象以及回调客户端: https://www.jianshu.com/p/bc59061cc6fd    //也不错

Android跨进程通信IPC之11——AIDL:https://www.jianshu.com/p/375e3873b1f4

AIDL的使用步骤:https://www.cnblogs.com/chase1/p/7135961.html

AndroidStudio实现AIDL : https://www.cnblogs.com/chase1/p/7135961.html

Android中使用AIDL时的跨进程回调—Server回调Client:https://blog.csdn.net/songjinshi/article/details/22918405

AIDL使用学习(二):跨进程回调以及RemoteCallbackList: https://www.jianshu.com/p/16077065fe89 //分别用单个回调和回调列表进行了回调。

android aidl通信 RemoteCallbackList客户端注册回调:https://msd.misuland.com/pd/3255818066314924322 //很好分析了messager和aidl。in out关键字

AIDL回调:
AIDL的反向过程。服务端需要客户端提供AIDL供服务端回调。

客户端需要注册回调函数,服务端调用回调函数。

问题:客户端如何获知被回调了,

AIDL实际上是对Binder机制的封装。Binder是进程间通信的机制。

AIDL使用中常见问题:https://blog.csdn.net/weixue9/article/details/80833959

===========【BinderPool相关链接】====================
AIDL有个问题就是,当多个业务模块都需要通过AIDL来进行进程间通信,就要创建10个Service来应对。

这会导致Service太多,Service本身就是系统资源。

为了解决上述问题,需要减少Service数量,让所有AIDL都放在同一个Service中去管理。


BinderPool服务端发现的治理工具:https://www.cnblogs.com/mantoudev/p/8228011.html

Binder连接池:https://www.cnblogs.com/rookiechen/p/5382960.html

IBinder:
iBinder的解释(讲得不错):http://blog.sina.com.cn/s/blog_8d13a22b0100upog.html

IBinder接口是对跨进程的对象的抽象。普通对象在当前进程可以访问,如果希望对象能被其它进程访问,那就必须实现IBinder接口。IBinder接口可以指向本地对象,也可以指向远程对象,调用者不需要关心指向的对象是本地的还是远程。

什么是IBinder:http://www.sgyma.com/hhlm_49226.html

Binder是一个类,它实现了IBinder接口,而IBinder接口定义了与远程对象的交互协议。通常在进行跨进程通信时,不需要实现IBinder接口,直接从Binder派生即可。

Binder和AIDL的关系:https://blog.csdn.net/daihuimaozideren/article/details/79456953

==================================================

原文地址:https://www.cnblogs.com/grooovvve/p/12462805.html