失败之事十有八九,成与败的区别,就在于如何面对这十有八九的失败,被失败打败的,成了失败者,把失败打败的,成了成功者
IPC(Inter-Process Communication),含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。那么,什么是进程又什么是线程?按照操作系统中的描述,线程是CPU调度的最小单元,同时线程是一种有限的系统资源;而进程一般是指一个执行单元,在PC和移动设备上指一个程序或者一个应用。一个进程可以包含多个线程,因此进程和线程是包含与被包含的关系。当然,最简单的情况下,一个进程中可以只有一个线程,即主线程(Android中称为UI线程),在UI线程中才能操作界面元素。很多时候,一个进程中需要执行大量的耗时的任务,如果这些任务放在主线程中去执行就会造成界面无法响应(ANR,Application Not Responding – 应用无响应)。解决这个问题就需要用到线程,把一些耗时的任务放在线程(除UI线程)中即可。
IPC不是Android中所独有的,任何一个操作系统都需要有相应的IPC机制。对于Android来说,它是一种基于Linux内核的移动操作系统,它的进程间通信方式并不能完全继承自Linux,相反,它有自己的进程间通信方式。在Android中最具有特色的进程间通信方式就是Binder了,通过Binder可以轻松地实现进程间通信。除了Binder,Android还支持Socket,通过Socket也可以实现任意两个终端之间的通信,当然同一个设备上的两个进程通过Socket通信自然也是可以的。
说到IPC的使用场景就必须提到多进程,只有面对多进程这种场景下,才需要考虑进程间通信。如果只有一个进程在运行,又何谈多进程呢?多进程的情况分两种:第一种情况是一个应用因为某些原因自身需要采用多进程模式来实现,比如有些模块由于特殊原因需要运行在单独的进程中,又或者为了加大一个应用可使用的内存所以需要通过多进程来获取多份内存空间。另一种情况是当前应用需要向其他应用获取数据,由于是两个应用,所以必须采用跨进程的方式来获取所需的数据,甚至我们通过系统提供的ContentProvider去查询数据的时候,其实也是一种进程间通信,只不过通信细节被系统屏蔽了,我们无法感知而已。