Android应用的多进程

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和签名的应用才能共享数据。

猜你喜欢

转载自blog.csdn.net/yumeizui8923/article/details/80349956