1.IPC简介
2.Android启动多线程的2种方式及原理
3.Android应用的进程的生命周期
1.IPC简介
IPC(Inter Process Communication),进程间通信或跨进程通信,主要表现为多个进程间进行数据交换的过程。
进程是程序执行的实例。在操作系统中的定义中,进程是程序的最小执行单元;在支持线程的操作系统的定义中,线程是程序的最小调度单元。进程之间的内存空间是互相独立的,在无IPC的情况下,各个进程内部的操作不会影响其它进程的内部。
Android基于Linux,但是Android并不能完全继承Linux的IPC,相反,Android有自己独有的IPC方式——Binder,除了Binder之外,还可以通过Socket、共享文件等方式进行IPC。
2.Android启动多线程的2种方式
第一种方式:通过给四大组件制定android:process属性,就可以让四大组件运行在不同的进程中。
第二种方式:通过JNI调用fork函数启动多进程,不推荐。
通过第一种方式启用多进程后,我们需要注意一点:那就是Application组件会被多次实例化,并且应用的所有内存会被复制一份给新的进程使用。
假如ActivityA运行在进程1,ActivityB运行在进程2,并且有int静态变量Global.demo,Global.demo的默认值为0,如果我们在启动ActivityB后在ActivityA设置Global.demo为1,那么我们在ActivityB中访问Global.demo时,Global.demo的值还是0。这充分说明了运行多进程的应用会复制若干份进程内存空间,并且各个进程的内存空间互补影响。
3.Android应用的进程的生命周期
在单进程的应用中,如果Application组件没有被销毁,那么该进程还是会存在。如果想要销毁Application组件,只能调用System.exit(0)方法或者Process.kill(Process.myPid())方法。
4.四大组件的android:process属性配置
该属性的配置有两种方式:
1.android:process=”:xxx”
2.android:process=”yyyy.xxx”
对于第一种方式,该组件所在的进程名为“package_name:xxx”,该进程数所属应用的私有进程,其它应用的组件不能与该组件运行在一个进程中。
对于第二种方式,该组件所在的进程名为“yyyy.xxx”,该进程数全局进程,其它应用可以通过ShareUID方式和该组件运行同一个进程中。
Android系统会为每一个应用分配一个UID,具有相同UID和签名的应用才能共享数据。