开启多线程模式、

开启的方法

  • 在Android中使用多进程只有一种方法,那就是给四大组件指定android:process属性
  • 还有一种非常规的方法是通过JNI在native层去fork一个新的进程,但一般不做考虑

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<activity
android:name=".ThirdActivity"
android:exported="false"
android:process=":app"/>
<activity
android:name=".SecondActivity"
android:configChanges="screenLayout"
android:exported="false"
android:launchMode="singleTask"
android:process="com.example.activitycycletest.app"/>
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

查询进程的方法

在终端输入命令

adb shell ps | Select-String +包名

进程分类

  • 进程名以“:”开头的属于当前应用的私有进程,其他应用的组件不可以和他跑在同一个进程中,而进程名不以“:”开头的属于全局进程,其他应用通过ShareUID方式可以和他跑在同一个进程中
  • 两个应用通过ShareUID跑在同一个进程中是有要求的,需要两个应用有相同的ShareUID并且签名相同才可以

多进程模式的运行机制

不同进程之间数据共享失败的原因

Android为每一个进程都分配了虚拟机,不同的虚拟机在内存分布上有不同的地址空间,这就导致在不同的虚拟机中访问同一个类的对象会产生多个副本

多进程造成的问题

  • 静态成员和单例模式完全失效
  • 线程同步机制完全失效
  • SharedPreferences的可靠性下降(SharedPreferences不支持两个进程同时去执行写操作,否则导致一定几率数据丢失 )
  • Application会多次创建