Android 进程间数据共享

Android 进程间数据共享

BroadcastReceiver 广播

优点:简单易用实时通信
缺点:只支持数据单向传递,效率低且安全性不高
场景: 一对多的低频率单向通信

ContentProvider 内容提供者

优点:支持一对多的实时并发通信,在数据源共享方面功能强大,可通过Call方法扩展其它操作
缺点:可以理解为受约束的AIDL,主要提供对数据源的CRUD操作
场景: 一对多的进程间数据共享

AIDL

优点:功能强大,支持一对多实时并发通信
缺点:使用稍复杂,需要处理好线程间的关系
场景: 一对多通信且有RPC需求

文件共享

优点:简单易用
缺点:不适用高并发场景,并且无法做到进程间即时通信
场景:适用于无并发的情况下,交换简单的数据,对实时性要求不高的场景。

Bundle

优点:简单易用
缺点:只能传输Bundle支持的数据类型
场景: 四大组件间进程通信

Socket

优点:功能强大,可通过网络传输字节流,支持一对多实时并发通信
缺点:传输效率低,开销大,实现细节步骤稍繁琐,不支持直接的RPC
场景: 网络间的数据交换

Messenger

优点:功能一般,支持一对多串行通信,支持实时通信
缺点:不能很好地处理高并发的情形,不支持RPC,由于数据通过Message传输,因此只能传输Bundle支持的数据类型
场景: 低并发的一对多实时通信,无RPC需求,或者无需要返回结果的RPC需求

Bundle传输数据类型

Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的。

  • 使用Bundle在Activity之间传递数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。
  • 当Bundle传递的是对象或对象数组时,必须实现Serializable或Parcelable接口。

Messenger简单介绍

可以翻译为信使,通过它可以实现在不同进程中传递Message 对象。
是一种轻量级的 IPC 方案。
Messenger 底层是通过AIDL实现的(在 两个 构造方法 可以看出来)。

public Messenger(Handler target) {
        mTarget = target.getIMessenger();
    }

public Messenger(IBinder target) {
        mTarget = IMessenger.Stub.asInterface(target);
    }

Messenger工作原理
在这里插入图片描述

总结

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值