前言

今天主要对 Android 中的跨进程通信进行总结下,先梳理下里面的涉及的一些概念

1.进程与线程2.Android 应用中的多进程(1)dalivk虚拟机

Android 系统的底层任务管理以及驱动都是基于 Linux 系统;一个 Android 系统其实就是一个 Linux 系统,通过 adb shell 进入连接的手机,就可以看到 Linux 系统的文件系统

android系统架构层次以及各层说明(一文读懂Android跨进程通信机制)(1)

像在运行一个 Java 程序,我们知道 Linux 系统会启动一个Java虚拟机来运行该 Java 程序,而 Android 系统是一个特殊的 Linux 系统,当启动一个 APP,系统会为该 APP 分配一个 Linux 进程,而该进程中就会有一个 dalivk 虚拟机(又称为 DVM )实例来运行该 APP,所以 dalivk 虚拟机就是用来运行 APP 程序

不同的APP运行在不同的进程中,对应着不同的dalivk虚拟机,就对应着不同的地址空间。反过来在一个应用内,如果新开一个进程,那么由于系统在新开进程的时候会分配独立的dalivk虚拟机,那么对于该APP内的不同进程的实例是互相独立,互不影响。

综上:

(2)Linux 系统组成

在 Linux 系统中,虚拟内存空间(我理解的就是运行软件程序的空间,是对物理空间的映射)只有 4G最高的 1GB(对应虚拟地址0xC0000000到0xFFFFFFFF)被成为内核空间,而较低的 3GB(对应虚拟地址0x00000000到0xBFFFFFFF)被成为用户空间。内核空间是Linux内核运行空间,用户空间是应用程序的运行空间。如图所示:

android系统架构层次以及各层说明(一文读懂Android跨进程通信机制)(2)

不同进程之间,用户空间是不共享,但是内核空间是可以共享。

(3)定义多进程

默认情况下,启动一个APP,仅仅启动了一个进程,该进程名为包名,那如何定义多进程呢?Android 提供了一种方式,就是在 AndroidManifest 文件中可以通过 “android:process” 来指定进程:

(4)为什么要引入多进程?

为什么一个 Android 应用要引入多进程?多进程有哪些应用场景呢?

通常在下面两种情况下需要引入多进程:

(5)跨进程通信

既然在 Android 中引入了多进程,而对于进程的用户空间不共享,那么多进程之间怎么通信呢?

这种多进程通信又称为IPC(Inter Process Communication)

对于IPC,并不是Android系统特有的,在Linux系统中就存在的跨进程通信,在Linux系统中常见的IPC方式有:

而在 Android 中,场景的 IPC 方式有:

除去 Socket,其他的都是基于 Binder 机制实现的

(6)多进程带来的问题

在进程结构中也提到了用户空间是不共享的,并且每个进程都是对应单独系统堆栈区、静态区等,那么多进程也引入了一些问题:

题外话: 最后的这个信息让我想起之前看 web 开发相关的一些信息:Tomcat 也是运行在 Linux 系统中,在部署 web 应用的时候,可以把一个 web 应用部署到多个 Tomcat 服务器上,那么每个 Tomcat 服务器都会给该 web 应用分配一个 ServletContext

这篇文章,其实不难;主要是将 Android 中的跨进程通信以及开发当中经常用到的一些知识点,总结了一下

想要往向更深入学习难免需要寻找很多的学习资料辅助,我在这里推荐网上整合的一套《 Android 跨进程通信学习手册》;鉴于出自大佬之手,可以帮助到大家,能够少走些弯路

android系统架构层次以及各层说明(一文读懂Android跨进程通信机制)(3)

篇幅原因,就不在这里为大家赘述了,有需要的小伙伴:可以私信发送“学习手册”即可 免费领取这份《Android 跨进程通信学习手册》,助你早日成为底层原理大师!

android系统架构层次以及各层说明(一文读懂Android跨进程通信机制)(4)

最后大家如果觉得手册内容有用的话,可以点赞分享一下哦~

,