【朝花夕拾】Android性能篇之(七)Android跨进程通信

       Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Android开发高级工程师必须要跨过的一道坎,也是面试时经常被问及到的知识点。但是,我们是否真的清楚,Android中都有哪些方式实现跨进程通信呢?这些方式都有哪些优缺点?如何选择这些通信方式?Binder是什么?为什么要引入Binder?Binder是这么样实现跨进程通信的?AIDL是什么?AIDL和Binder又有什么关系呢?......

 

一、基础知识简介

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

  1、进程隔离

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

       

【朝花夕拾】Android性能篇之(七)Android跨进程通信

  2、跨进程通信

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

 

二、Linux跨进程通信方式

       我们知道,Android系统就是基于Linux内核实现的,咱们先简单了解一下Linux系统的IPC方式。虽然不同的资料对各种方式的名称和种类说法不完全相同,但是主要来说有如下6种方式:(1)管道 Pipe;(2)信号Signal;(3)信号量Semaphore;(4)消息队列Message Queue;(5)共享内存Shared Memmory;(6)套接字Socket。读者若想深入了解这些方式,可以自行查阅,这里不展开介绍,只需要知道有这六种方式即可。

       

三、Android跨进程通信

      Android IPC的方式在不同的资料中有不同的说法,但从大方向上看,可以归纳为如下四种(这里仅对各种方式做简单介绍和优劣对比,对具体如何使用,不做讲解):

  1、Activity方式

       Activity是四大组件中使用最频繁的,咱们先从它说起。使用Activity方式实现,就是使用startActivity()来启动另外一个进程的Activity。

    (1)场景

       我们在使用App的使用,往往会遇到如下几种情形:(1)浏览器中看到一篇比较不错的文章,分享到微信朋友圈或者微博;(2)在某个App中点击某个网址,然后界面跳转到浏览器中进行阅读;(3)使用美团外卖app,看到店家的电话,点击联系商家时,跳转到了电话拨打界面......这样的操作再频繁不过了。这些就是通过startActivity的方式从一个App,跳转到了另外一个App的Activity,从而实现了跨进程通信。

    (2)使用

       我们知道,在调用startActivity(Intent intent)的时候,intent有两个类型:显式Intent和隐式Intent。

       1)显式Intent的使用方式如下,用于进程内组件间通信:

1 Intent intent = new Intent(this,OtherActivity.class); 2 startActivity(intent);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygdzf.html