Android开发

Android进程通信

本文主要是介绍Android进程通信,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

进程间通信简称IPC(Inter-Process Communication).Android 基于Linux,,而 Linux 出于安全考虑,不同进程间不能之间操作对方的数据,这叫做“进程隔离”。这样做的目的是为了保证每个进程的安全。

IPC方式
名称 优点 缺点 适用场景
Bundle 简单易用 只能传输 Bundle 支持的数据类型 四大组件间的进程间通信
文件共享 简单易用 不适合高并发场景,并且无法做到进程间即时通信 无并发访问情形,交换简单的数据实时性不高的场景
AIDL 功能强大,支持一对多并发通信,支持实时通信 使用稍复杂,需要处理好线程同步 一对多通信且有 RPC 需求
Messenger 功能一般,支持一对多串行通信,支持实时通信 不能很处理高并发清醒,不支持 RPC,数据通过 Message 进行传输,因此只能传输 Bundle 支持的数据类型 低并发的一对多即时通信,无RPC需求,或者无需返回结果的RPC需求
ContentProvider 在数据源访问方面功能强大,支持一对多并发数据共享,可通过 Call 方法扩展其他操作 可以理解为受约束的 AIDL,主要提供数据源的 CRUD 操作 一对多的进程间数据共享
Socket 可以通过网络传输字节流,支持一对多并发实时通信 实现细节稍微有点烦琐,不支持直接的RPC 网络数据交换
Binder
提到Binder,我们就会想到,他是android底层主要的进程间通信的,Binder机制只是IPC的其中一种,Android的四大组件(Activity,service,Broadcast,ContentProvider)之间的通信也是采用了Binder进行的通信。

IPC通信不得不提到两个序列化的组件,他们基本上是跟Binder绑定使用的:

Serializable和Parcelable接口可以完成对象的序列化过程,当我们需要通过Intent和Binder传输数据的时候就需要对数据进行序列化处理。还有的时候我们需要将数据持久化保存到本地或者通过网络传输给其他终端,我们也需要Serializable完成对象的持久化。

Serialiazable:Java提供的序列化接口(标记接口)
Parcelable:android提供的序列化接口

Serializable 是Java中的序列化接口,使用起来简单;Parcelable是Android中的序列化方式,使用起来稍微复杂一些。
Serializable 在序列化操作的时候会产生大量的临时变量,从而导致GC的频繁调用(原因是使用了反射机制);Parcelable是以Ibinder作为信息载体的,在内存上的开销比较小,因此在内存之间进行数据传递的时候,Android推荐使用Parcelable。
将对象序列化到存储设备上或者序列化后通过网络传输,使用Parcelable 会稍显复杂,因此这两种情况建议使用Serializable。

https://pan.baidu.com/s/1cKSuxWbjjkep34XtXjoqIw 提取码:1111,复制到du盘扫一扫 细聊

这篇关于Android进程通信的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!