使用多进程的情况分为两种可能:
1:一个应用因为某些原因自身需要运行在独立的进程中,又或者为了加大一个应用可使用的内存所以需要通过多进程来获取多份内存空间。
2:当前应用需要向其他应用获取数据,由于是两个应用,所以必须要采用跨进程的方式去获取需要的数据,甚至我们通过系统的ContentProvider去查询数据的时候,其实也是一种进程间通信,只不过通信细节被系统内部给屏蔽 了,无法感知。
在android中使用多进程只有一个方法,就是为四大租件在androidMenfiest中知指定android:process 属性,除此之外别无他法。。。除了另一种非常规的多进程方法,就是通过JNI在底层去fork一个新的进程,该方法属于特殊情况,非常见情况。。。本章不考虑该情况,需要了解,请自行查询资料
xml代码如下:
xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android" package="com.xyz.project"> android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> android:name=".MainActivity"> android:name="android.intent.action.MAIN" /> android:name="android.intent.category.LAUNCHER" /> android:name=".Main2Activity" android:process=":remote" /> android:name=".Main3Activity" android:process="com.xyz.project.test">
xml中的三个activity中
MainActivity:没有为其指定进程,那么就会运行在应用默认的进程中,默认的进程名字和app的包名是一样的。
Main2Activity:这个activity的process属性就特殊一点了, 以‘:进程名称’的方式进行命名,和Main3Activity 的 com.xyz.project.test 完整命名方式有什么区别呢?
其实也没什么区别。。那是不可能的
第一个区别: 以 ':进程名称' 的方式命名的话代表 在当前进程名前面附加上当前的包名 最终的进程名称就是 com.xyz.project.remote ,其实这只是一种缩写的方式,然并卵,但是需要了解下,万一哪个畜生就是这么写的,到时候一脸懵逼就不好了。。。
第二个区别: 以':进程名称' 的命名的进程的 表示是当前应用的私有进程,其它应用的组件不可以和他跑在同一个进程中,而进程名不以':'开头的进程属于全局进程,其它应用通过ShareID【android系统会为每一个应用分配一个唯一的UID,具有相同的UID应用才可以共享数据】方式可以和他跑着同一个进程中
最终运行的结果可以在android studio的监视器窗口进行查看: