Android中的每个活动都是一个进程,或者一个应用程序就是一个进程

在这个页面http://androidapps.org.ua/androidintro_ipc.html中 ,活动之间的意图切换被描述为进程间通信。 现在我很困惑是否每个activity都是android中的一个单独的进程,或者应用程序中的所有activity都是一个进程。 我检查了我的应用程序中使用的所有活动和服务的进程ID:

int id = android.os.Process.myPid(); System.out.println("Process id of Activity1 :"+id); 

但它显示相同的进程ID。 请回复。

 All activities inside an application run in one process? 

它依赖于应用程序清单中android:process属性的值。

如果属性android:process没有为清单中的Application / Activity标签定义,默认情况下,所有活动都将在单个进程中运行(进程名称将是清单中定义的包的名称)

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.so.test" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Activity1"> </activity> <activity android:name=".Activity2"> </activity> <activity android:name=".Activity3"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

在上面的清单中,所有活动都在com.so.test进程中com.so.test ,ps命令在adb shell中输出:

 # ps app_39 668 33 84492 20672 ffffffff afd0c51c S com.so.test 

如果为Activity指定了android:process ,则将使用相同的userid创build新的进程,并在该进程中运行该活动。

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.so.test" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name" android:process="com.so.p1"> <activity android:name=".Activity1"> </activity> <activity android:name=".Activity2" android:process="com.so.p2"> </activity> <activity android:name=".Activity3" android:process="com.so.p3"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

如果清单是像上面那样定义的

 Activity1 runs in com.so.p1 process Activity2 runs in com.so.p2 process Activity3 runs in com.so.p3 process 

ps输出在adbshell

 # ps app_39 650 33 83192 20900 ffffffff afd0c51c S com.so.p1 app_39 659 33 83188 20864 ffffffff afd0c51c S com.so.p2 app_39 668 33 84492 20672 ffffffff afd0c51c S com.so.p3 

如果需要在此清单中未定义的另一个进程中运行“活动”,则两个APK都应使用相同的证书进行签名。

没有一个应用程序的活动不能在不同的过程中运行。 实际上,即使是由同一个开发人员构build的不同应用程序(如果所有应用程序使用相同的证书)也可以在同一个进程中运行!

正如文档所述:

应用程序模块化 – 如果应用程序提出请求,Android系统允许由相同证书签名的应用程序在同一进程中运行,以便系统将其视为单个应用程序。 通过这种方式,您可以将应用程序部署到模块中,如果需要,用户可以独立更新每个模块。

您可以将意向发送给另一个应用程序,前提是它有一个意图filter。

所以是的,你的应用程序中的所有活动都将在相同的过程中运行。

例如:您可以向所有电子邮件应用程序发送一个通用意图。 Gmail是一个这样的应用程序,它具有一个意图filter来监听电子邮件意图。 这就是你如何使用意图实现IPC。