一个应用程序如何开启多进程
android的四大组件加上属性android:process
带来的问题
当一个应用程序(一个apk)中开启了多进程后,会出现各种问题
- 静态成员和单例模式完全失效
- 线程同步机制完全失效
- application会被多次创建
- SharedPreferences数据访问可靠性下降
原因
- android为每个独立的应用程序分配一个独立的虚拟机,每一个进程都要分配一个虚拟机,不同的虚拟机在内存分配上有不同的地址空间,导致不同的虚拟机访问同一个对象会产生多份的副本。
- 所有运行在不同内存中的四大组件,只要他们之间通过内存来共享数据,都会共享失败。
- 不是同一块内存了,不管是锁对象还是锁全局类,都无法保证线程同步,因为不同的锁不是同一个对象
- 当一个组件跑在一个新的进程中的时候,由于系统要在创建新的进程同时分配独立的虚拟机。这个过程就是启动了一个应用的过程,因此相当于系统又把这个应用重新启动了一遍,既然重新启动了,就会重新创建application.运行在同一个进程中的组件是属于同一个虚拟机,同一个application
- 在多进程模式中,不同进程的组件会拥有独立的虚拟机,application,以及内存空间,也可以这样理解,同一个应用中的多进程,相同于两个不同的应用采用了SharedUID模式
实现跨进程通信
跨进程通信,虽然不能实现内存共享,但是通过跨进程可以实现数据交互
实现跨进程的方式很多,通过intent方式,共享文件,SharedPreference,基于Binder的Messager和AIDL以及Socket