Android知识Android开发经验谈Android开发

Android 多进程通信(1) --- 概述

2018-05-23  本文已影响51人  sunnyaxin

当启动App且没有运行其他组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下一个App中的所有组件都在同一个进程和线程中,但也可以通过配置manifest使组件运行在单独的进程中。在实际应用场景中,Android四大组件都支持属性,以决定在哪个进程运行,因此进程间通信就会变得尤为重要。

Android 利用远程过程调用 (RPC) 提供了一种进程间通信 (IPC) 机制,通过这种机制,由 Activity 或其他应用组件调用的方法将(在其他进程中)远程执行,而所有结果将返回给调用方。 这就要求把方法调用及其数据分解至操作系统可以识别的程度,并将其从本地进程和地址空间传输至远程进程和地址空间,然后在远程进程中重新组装并执行该调用。 然后,返回值将沿相反方向传输回来。 Android 提供了执行这些 IPC 事务所需的全部代码,因此我们只需集中精力定义和实现 RPC 编程接口即可。

基本概念

Android 几种进程通信方式

Android多进程通信的相关技术和方法网上有很多总结,因为其重要性,在学习这块相关内容时也显得非常重要,此时从网上搜索会发现总结了很多Binder、AIDL、ContentProvider、Socket等各种方法,看起来很高端很复杂的样子,但却导致无从下手,难以开始。因此,可以从Android四大组件入手,Activity,Service,BroadcastReceiver,ContentProvider

Activity

Activity既可以在进程内(同一个应用程序)访问,也可以跨进程访问。但Activity 的跨进程通信其实最为常见,就是我们经常使用的 Intent,通过startActivity的方式将Intent实例化并发送出去,此时启动的Acitivity很有可能是在不同进程中的,同时,配合startActivityForResult 和 onActivityResult 就解决了进程间通信的问题。

Intent intent = new  Intent(this , Test.class );
startActivity(intent);
Intent callIntent = new  Intent(Intent.ACTION_CALL, Uri.parse("tel://13888888888" );
startActivity(callIntent);
Service

Service 的跨进程通信较为复杂,但主要的通信方式包括:Binder、Messenger、AIDL,他们的原理都是类似的,后面会通过一系列文章进行详细讲解。

Content Provider

ContentProvider为存储和获取数据提供统一的接口,它可以在不同的应用程序之间共享数据,本身就是适合进程间通信的。ContentProvider底层实现也是Binder,是对 SQLite 的一种封装,ContentProvider封装了跨进程共享的逻辑, 只需要Uri即可访问数据, 使用共享数据非常便捷,提供了一种数据的访问方式,可以对外提供或获取数据,如电话本、图片、短信等。

Broadcast Receiver

Broadcast Receiver 可以发送广播,例如APP1发送了一个广播,APP2监听该广播,并在监听到时对该广播进行响应处理,也达到了进程间通信的目的。广播跨进程通讯是一种被动的访问方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。

其他方式
文件共享
Socket

Socket 通信实际上为,与Android系统本身没有太大关系,但在实际使用中需要注意端口分配映射关系的处理。

其中:

IPC适合场景及优缺点

名称 优点 缺点 使用场景
Bundle 简单易用 只能传输Bundle支持的数据类型 四大组件的进程间通信
AIDL 功能强大,支持一对多的并发通信,支持实时通信 使用较复杂,需要处理好线程同步 一对多通信且有RPC需求
Messenger 功能一般,支持一对多的穿行通信,支持实时通信 不能很好处理并发现象,不支持RPC,只能传输Bundle支持的数据类型 低并发的一对多即时通信,无RPC需求
ContentProvider 数据访问方面功能强大,支持一对多并发数据共享 受约束的AIDL,主要提供数据源的CRDU操作 一对多的进程间的数据共享
文件共享 简单易用 不适合高并发场景,无法做到进程间的及时通信 没有并发的情形,交换简单的数据
Socket 功能强大,可通过网络传输字节流,支持一对多的并发实时通信 繁琐,不支持直接的RPC 网络数据交换
上一篇 下一篇

猜你喜欢

热点阅读