Android 多进程运行机制及IPC
今天总结下 Android 多进程运行机制以及 IPC 介绍,内容如下:
Android中的进程
Android IPC介绍
开启多进程模式
Android多进程运行机制
Android中的进程
首先进程可以理解为独立运行的程序,当某个程序启动时,系统将会为该程序创建一个进程,并为其分配所需的系统资源,同时将该进程添加到进程就绪队列中,进程调动程序负责运行哪一个进程。Android 中的应用程序可以为一个进程,也可以配置成多进程,每个进程都在自己独立的空间中运行,Android 为每个进程分配一个虚拟机,不同的虚拟机在内存分配上有不同的地址空间,不同的进程自然涉及到进程间通信。Android 中的进程如下:前台进程:可与用户直接交互或与前台绑定的Service所在的进程;
可见进程:用户可见但是不可点击;
服务进程:后台执行的 Service 所在的进程;
后台进程:相对于前台进程而言的进程;
空进程:理解为一种缓存意义上的进程,系统随时可以选择回收空进程。
Android IPC介绍
IPC(Inter-Process Communication) 指的是进程间通信或跨进程通信,任何一个操作系统都需要相应的 IPC 机制来完成进程间通信,如 Windows 上可以通过剪切板、管道等来完成进程间通信,Linux 上可以通过信道、共享内存、信号量来进行进程间通信Android 虽然基于 Linux,但是为了适应移动端的特点,专门提供了一种进程间通信方式 Binder,所以说到 Android 中的 IPC 机制,一般指的就是 Android 中的 Binder 机制。IPC使用场景:某些应用自身需要采用多进程模式,如在 Android 中对一个应用获取的最大内存做了限制,为了使自己的应用获取更多内存空间而将一些模块放在独立进程中,此时模块之间的交互就需要进程间通信来完成;
应用本身需要跨进程与其他应用交互,无论是使用 ContentProvider 还是 AIDL 都属于 IPC 的范畴,如在 Android 机顶盒 IPTV 中间件中就有大量使用。
开启多进程模式
Android 中开启多进程是在四大组件中配置android:process
属性来开启多进程,配置时可以配置成私有进程和全局进程,如下:如果配置成私有进程,则其他应用的组件不可与其跑在同一个进程中,如果配置全局进程,则可以将两个应用设置成相同的 ShareUID 将两个应用的组件运行在同一个进程中,除此之外这两个应用的签名也得相同,这样将可将两个应用的组件运行在同一进程中,且可以共享私有数据如 data 目录等。那么怎么将两个应用的组件配置在同一进程呢?
<activity
android:name="com.manu.process.SampleActivity"
android:process=":remote"/>
<activity
android:name="com.manu.process.SampleActivity"
android:process="com.manu.remote"/>
两个应用设置相同的 ShareUID
两个应用的两个组件的进程设置成进程名相同的全局进程
两个应用签名相同
Android多进程运行机制
Android 为每个进程分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致在不同的虚拟机中访问同一个类的对象会产生多份副本,也就是说在两个进程中存在着同一个类的两个副本,这两个类互不干扰,修改一个不会影响另一个,这就导致了一个问题,即运行在不同进程中的四大组件,只要它们之间通过内存来共享数据,都会共享失败,多进程造成的问题如下:静态成员和单例模式完全失效
线程同步机制完全失效
SharePreference的可靠性下降
Application多次创建
评论