IPC机制-Android IPC简介

时间:2022-02-09 16:13:35

IPC是Inter-Process Communication的缩写,含义位进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。说起进程间通讯,我们首先要理解什么是进程,什么是线程,进程和线程是截然不同的概念。按照操作系统中的描述,线程是CPU调度最小的单元,同时线程是一种有限的系统资源。而进程一般是指执行一个单元,再PC和移动设备上只一个程序或者一个应用。一个进程可以包含多个线程,因此进程和线程是包含与被包含的关系。最简单的情况下,一个进程中可以有一个线程,即主线程,再Android里面主线程也叫UI线程,再UI线程里才能操作界面元素。很多时候,一个进程中需要执行大量耗时的任务,如果这些任务放在主线程中去执行就会造成界面无法响应,严重影响用户体验,这种情况再PC系统和移动系统中都存在,再Android中有一个特殊的名字叫做ANR(Application Not Responding),即应用无响应。解决这个问题就需要用到线程,把一些耗时的任务放在线程中即可。


IPC不是Android中所独有的,任何一个操作系统都需要有相应的IPC机制,比如Windows上可以通过剪切板、管道、和邮槽等来进行进程间通讯;Linux上可以通过命名管道、共享内容、信号量来进行进程间通讯。可以看到不同的操作系统平台有着不同的进程间通讯方式,对于Android来说,他是一种基于Linux内核的移动操作系统,它的进程间通信方式并不完全继承自Linux,相反,它有自己的进程间通信方式。再Android中最有特色的进程间通讯方式就是Binder了,通过Binder可以轻松地实现进程间通信,当然同一个设备上地两个进程通过Socket通信自然也是可以的。


说到IPC的使用场景就必须提到多进程,只有面对多进程这种情况下,菜需要考虑进程间通信。这个是很好理解的,如果只有一个进程再运行,又何谈多进程呢?多进程的情况分为两种。第一种是一个应用因为某些原因自身需要采用多进程模式来实现,至于原因,可能有很多,比如有些模块由于特殊原因需要运行再单独的进程中,又或者为了加大一个应用可是要的内存所以需要通过多进程来获取多分内存控件。Android对单个应用所使用的最大内存做了限制,早期的一些版本可能是16MB,不同设备有不同的大小。令一种情况是当前应用需要向其他的应用获取数据。由于是两个应用,所以必须采用跨进程的方式来获取所需的数据,甚至我们通过系统提供的ContentProvider去查询数据的时候,其实也是一种进程间通讯,只不过通信细节被系统内部屏蔽了,我们无法感知而已。后续章节会详细介绍ContentProvider的底层实现,这里就先不做详细介绍了。总之,不管由于何种原因,我们采用了多进程的设计方式,那么应用中就必须妥善地处理进程间通信的各种问题了。