第二章 IPC机制
2.1 Android IPC 简介
线程是资源分配的最小单元,有独立的地址空间;线程是CPU调度的最小单元,是一种有限的系统资源,没有自己的独立空间,而是共享所在线程的地址空间,但是拥有自己的局部变量和堆栈。
2.2 Android 中的多进程模式
2.2.1 开启多进程模式
Android中使用多进程的方法:在AndroidMenifest中给四大组件指定android:process属性。
实验测试
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity"
android:process=":remote"/>
<activity android:name=".ThirdActivity"
android:process="com.abc.remote"/>
使用
adb shell ps
查看进程信息。可以发现系统会为指定”:remote”分配进行名为”包名:remote”的进程,而为”com.abc.remote”分配进程名为”com.abc.remote”的进程。
第一种命名方式中”:”的含义是指要在当前的进程名前面附加上当前的包名,属于简写方法,而第二种命名方式是一种完整的命名方式,因而不会附加包名信息。
“:”开头的进程属于当前应用,其他应用的组件不可以和他跑在同一个进程中,而不以”:”开头的进程属于全局进程,其他应用可以通过ShareUID方式和他跑在同一个进程中。
2.2.2 多进程模式的运行机制
Android为每一个进程都分配了一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间。因而,访问同一个类的对象会产生多个副本,且创建新进程的过程相当于创建新的应用。
使用多进程所造成的问题:
- 静态成员和单例模式完全失效
- 线程同步机制完全失效
- SharedPreference的可靠性下降
- Application会多次创建