Android 上的每个应用程序是否都有一个 PID?

问题描述

据我所知,PID 是每个正在运行的应用程序的唯一进程 ID。一个应用程序是否可以同时运行多个 PID,我们如何从 strace 输出中看到这一点?

解决方法

我很惊讶这个 SO 问题没有答案(如果有,我会将此问题标记为“重复”):

Is it possible for an app to have several PID at the same time?

我做了一些实验,据我所知,一个应用程序可以创建 几个可以执行代码的 ART (AndroidRunTime) 实例 同时。这些实例中的每一个都由相同的 PID 调用 应用程序。这些 ART 实例中的每一个都可以创建多个线程和 这些线程具有应用程序 PID。但是一个应用程序是否有可能拥有 几个PID同时?如果是这种情况,您能否提供一个 例子?

是的,一个 Android 应用程序可以有多个不同的 PID。

来自 Android 文档:

Processes and threads overview

默认情况下,同一个应用程序的所有组件都运行在同一个 流程和大多数应用程序不应改变这一点。

但它接着说:

但是,您可以在应用程序中安排不同的组件 在单独的进程中运行,你可以创建额外的线程 适用于任何流程。

每种类型的组件元素的清单条目——,,和 — 支持 android:process 可以指定该组件应该在其中的进程的属性 跑……

该元素还支持一个 android:process 属性, 设置适用于所有组件的默认值。

另外(来自我上面引用的 SO 帖子):

您还可以在不同的情况下发起不同的活动 带有 newTask 意图标志的 taskAffinities 然后将给出 也将 PID 与同一应用的那些活动分开。