Android进程间通信IPC

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37292229/article/details/81737373

一:简介:IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信。

二:使用多进程可能产生的问题

我们知道Android为每一个应用分配了一个独立的虚拟机,或者说为每个进程都分配了一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致在不同的虚拟机上访问同一个类型的对象会产生多分副本。所以运行在不同进程的四大组件,只要他们之间通过内存共享数据,都会共享失败。一般会造成如下几个方面的问题:

(1)静态成员和单例模式完全失效

(2)线程同步机制失效

(3)SharedPreferences的可靠性下降

(4)Application会创建多次

原因分析:

1和2的问题本质是类似的,因为在不同的进程中访问的对象不是同一个,同样锁的对象也不是同一个。第三个问题,SP不支持两个进程同事去执行写操作,否则会导致一定几率的数据丢失。第四个问题可以这样理解,运行在不同进程的组件是属于两个不同的虚拟机和Application的。

三:Android中的IPC方式

3.1 IPC方式的优缺点和适用场景

名称

优点

缺点

适用场景

Bundle

简单易用

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

四大组件间的进程间的通信

文件共享

简单易用

不适合高并发场景,并且无法做到进程间的即时通信

无并发访问的情形,交换简单的数据实时性不高的场景

AIDL

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

使用复杂,需要处理好线程同步的问题

一对多通信且有RPC需求

Messager

功能一般,支持一对多串行通信,支持实时通信

不能很好的处理高并发情形,不支持RPC,数据通过message传输,因此只能传输bundler支持的数据类型

低并发的一对多的即时通信,无RPC需求,或者无需要返回结果的RPC需求

ContentProvider

在数据源访问方面功能强大,支持一对多并发数据共享,可通过call方法扩展其他操作

可以理解为受约束的AIDL,主要提供数据源的CRUD操作

一对多的进程间的数据共享

Socket

功能强大,可以通过网络传输字节流,支持一对多并发实时通信

实现细节稍微有点繁琐,不支持直接的RPC

网络数据交换

3.2说明

RPC:RPC(Remote Procedure Call)——远程过程调用,RPC强调的是调用、即一个进程直接调用另外一个进程中的方法,比如客户端调用服务端的方法。

通过上面表格的分析。本文只对bundle、aidl、contentprovider和socket进行讲解

猜你喜欢

转载自blog.csdn.net/weixin_37292229/article/details/81737373