首页 > 移动平台 > 详细

【朝花夕拾】一篇文章搞懂Android跨进程通信

时间:2019-01-11 17:54:03      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:ace   不完全   容易   sha   over   rri   extend   感激   可读性   

前言

       只要是面试中高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点。Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Android开发高级工程师必须要跨过的一道坎。如果您还对这方面的知识还做不到如数家珍,那就和我一起来攻克它吧!

       本文主要包含了如下内容:

 

      技术分享图片

 

       其行文脉络大致如下,希望能加深读者对这方面内容的记忆:(1)Android基于Linux系统,所以先说系统进程相关知识和Linux IPC。(2)总结Android的IPC,顺带总结了Android进程内组件之间的通信方式。(3)Android为了克服Linux IPC中的缺点,引入了Binder,所以对Binder做了一些宏观上的介绍。(4)AIDL是实现Binder最常用的工具,所以详细介绍了AIDL相关内容。

 

一、基础知识简介

   在介绍Android跨进程通信之前,笔者先简单啰嗦一下进程隔离、跨进程通信。

  1、进程隔离

        在操作系统中,进程与进程间的内存和数据都是不共享的。两个进程就好像大海中相互独立的两个岛屿,各自生活在互相平行的两个世界中,互不干扰,各自为政。这样做的目的,是为了避免进程间相互操作数据的现象发生,从而引起各自的安全问题。为了实现进程隔离,采用了虚拟地址空间,两个进程各自的虚拟地址不同,从逻辑上来实现彼此间的隔离。

       技术分享图片

  2、跨进程通信

       马克思主义哲学说,人是一切社会关系的总和。任何一个个体都不可能完全隔离于外界,都不可避免地与外界“互通有无”。进程也一样,每一个进程完成的功能有限,就像现在的生成线一样,往往就是只完成某一类功能,而不是把所有事情都给做了,就这样,每个进程就时不时需要与其他进程之间通信了。两个进程之间要进行通信,就需要采用特殊的通信机制:进程间通信(IPC:Inter-Process Communication,即进程间通信或跨进程通信,后文以IPC替代,在此声明)。

 

二、Linux跨进程通信

       我们知道,Android系统就是基于Linux内核实现的,咱们先简单了解一下Linux系统的IPC方式。虽然不同的资料对各种方式的名称和种类说法不完全相同,但是主要来说有如下6种方式:(1)管道 Pipe;(2)信号Signal;(3)信号量Semaphore;(4)消息