ipc,便是inter process communication(进程间通信)
创建一个新的进程在安卓中只有两种方法,一种是四大组件在AndroidMenifest中间加入process参数,创建一个新的进程,而另一种便是通过c语言底层fook一个进程的。
对于新的进程,可以理解为一个新的独立的应用,因为每次在你创建一个新的进程的时候,对于底层实际上是系统又给应用分配一个新的jvm(java虚拟机),故这个新的进程相当于一个独立应用,拥有独立的存储空间,独立生命周期等等
在这里要注意,哪怕是一个相同的类,在另外一个进程访问这个类的时候,设计上是将这个类复制多一份放到自己堆栈空间中再去操作,所以哪怕一个进程对这个类做了任何操作,都不会对另外一个进程有半毛钱关系
举个例子,现在有一个公用类a
class a{
private static String name="luo"
}
而一个应用中有两个进程,一个是主进程main,一个是新开进程theNew,假设theNew执行了这句代码
a.name="hua"
那么在主进程main和新开进程theNew分别将类a的name参数打印出来,你将会看到这样结果
main进程:a.name=luo
theNew进程:a.name=hua
看到了吗,操作同一个类,结果打印出来结果互不相同,theNew虽然对类a折行了赋值行为,可是实际上是对拷贝到自己内存的类a2执行赋值行为而已,对其他进程没有影响
所以,就是因为这个原因,所以提出了进程间通信的需求
在安卓中,进程间通信主要有几种
1 共享文件
2 AIDL
3 messenger
4 intent
5 contentprovider
6 socket
其中 messenger也属于aidl,底层就是封装好的aidl
而说到进程间通信,就不得不说到binder
Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一。Android中的四大组件Activity,Service,Broadcast,ContentProvider,不同的App等都运行在不同的进程中,它是这些进程间通讯的桥梁。正如其名“粘合剂”一样,它把系统中各个组件粘合到了一起,是各个组件的桥梁。
其中Aidl进程通信方式可以参考这个:aidl实例分析
messenger可以参考这个:messenger实例分析
socket可以参考这个:socket实例分析
contentprovider可以参考这个:contentprovider实例分析