我们android在面试的时候,面试官会问到我们IPC,这个被问到的概率非常大,当然我每一次都会被问到,所以我总结了一下IPC,通过看一些大牛的书籍,整理了一些知识点,希望能帮到大家;
一。android IPC简介
IPC是Inter-process Communication的缩写。含义就是进程间的通讯或者夸进程通讯,是指两个进程间进行数据交换的过程,那么什么是进程,什么是线程,进程和线程是两个截然不同的概念,在操作系统中,线程是CPU调度的最小单位,同时线程是一种有限的系统资源,而进程指的一个执行单位,在PC和移动设备上指的是一个程序或者一个应用,一个进程可以包含多个线程,因此进程和线程是包含和被包含的关系,最简单情况下,一个进程可以只有一个线程,即主线程,在android里面也叫UI线程,在UI线程里才能操作界面元素。
那么在android中,有特色的进程间的通讯方式就是Binder了,通过Binder可以轻松实现进程间的通信,除了Binder,android还支持Scoket,通过Scoket也可以实现任意两个终端之间的通信,当然一个设备上的两个进程之间通过Scoket通信自然也是可以的;
说到IPC的使用场景就必须提到多进程,只有面对多进程这种场景下,才需要考虑进程间的通信,所有运行在不同进程中的四大组件,只要他们之间需要通过内存来共享数据,都会共享失败,这也是多进程所带来的主要影响,正常情况下,四大组件之间不可能不通过一些中间层来共享数据,那么通过简单地指定进程名来开启进程都会无法正确运行,一般来说,使用多进程会造成如下几方面的问题:
1.静态成员和单例模式完全无效
2,线程同步机制完全失效
3.SharedPerences的可靠性下降
4,Application会多次创建
为了解决这个问题,系统提供了很多跨进程通信方法,虽然说不能直接地共享内存,但是通过跨进程通信我们还是可以实现数据交互,实现跨进程通信的方式有很多,
二。IPC的方式
1.Bundle
一个进程启动另一个进程,Bundle将信息通过Intent发送出去。
条件:
传输数据必须能够被序列化,比如基本类型, Parcelable接口对象,
Bundle不支持的类型无法进程间传递