- 进程
首先来看进程的定义: 进程是指一个执行单元,在PC和移动设备上是指一个程序或者一个应用。而线程是CPU调度的最小单元,同时线程是一种有限的系统资源,一个进程可以包含多个线程,因此进程和线程是包含与被包含的关系,当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有组件在相同的进程和线程(称为“主”线程)中运行。
- 开启多进程
多进程的好处:
1、增大应用的可使用内存,Android对应用的最大内存内存做了限制,开启多进程可以申请到多块内存,应用中内存消耗比较大的模块,可以考虑新开一个进程。
2、多进程可以防止整个程序崩溃,假如新开的进程崩溃了,那么会返回到主进程中,而不会导致整个程序崩溃。
如果客户端和服务端不再同一个应用,默认就是两个进程;如果在一个应用内开启多进程,在AndroidManifest.xml文件中的四大组件 、 、 和 均支持 android:process属性来开启多进程。通过设置此属性,可以使每个组件均在各自的进程中运行,或者使一些组件共享一个进程,而其他组件则不共享。Android默认进程名是即是包名。
android:process的设置有两种:
1、android:process="xxx.xxx.xxxx.remote" 完整的命名方式,属于全局进程,其它应用通过ShareUID方式可以和它跑在同一个进程中。
2、android:process=":remote",“:”的含义是要在当前进程名前面加上包名,进程名以“:”开头是属于私有进程,其他应用不可访问。
- 多进程带来的问题
(1).静态成员和单例模式完全失效
(2).线程同步机制完全失效
(3).SharedPreference的可靠性下降
(4).Application会多次创建
- 进程间通信
IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。进程间通信的几种方式:Intent传递数据,文件共享,Messenger,AIDL,ContentProvider,Socket等。
1、Intent 只能传递简单的对象,对象必须实现Pacelable接口序列化,使用例子:多进程通信之Intent ;
2、Messenger基于消息(Message)实现进程间通信,服务端是串行执行客户端请求的,底层实现是AIDL,详细请看:进程间通信之Messenger;
3、允许不同应用的客户端用 IPC 方式访问服务,并且可以在服务端处理多线程,详细请看:进程间通信之AIDL;
4、进程间通信还可以通过继承Binder来实现,详细请看:继承Binder类实现多进程通信;