2

大图

我有两个 Android 应用程序HostGuest. 我正在尝试从中运行一个活动,Guest以便它立即在Host. 其目的是启动Guest应用程序应该在 中运行Host,但似乎正在运行Guest(即,用户应该,就所有意图和目的而言,不知道主机的存在,尽管它为客人做了繁重的工作)。

这个问题是关于让该Host活动在属于的进程中运行Host

(我为什么要这样做可能超出了这个问题的范围,但这绝对是我想做的事情)。

我以前尝试过的

首先,人们认为流程与其他Host活动的分离就足够了。

为此,该进程<activity>在清单中的元素中命名。

<activity android:name=".MainHostActivity" android:process="host.process" />

由于两个原因,这被证明是有问题的:

  • 它确实奏效了,但是面对多个客人,它变得非常笨拙和凌乱。
  • 使用户能够管理应用程序的标准 Android 工具不起作用(例如,从最近的应用程序列表中刷掉应用程序)。
  • 进程名称必须在编译时知道。

android:multiprocess

查看 AndroidManifest.xml 文档,我发现这个活动属性似乎很有帮助:

android:multiprocess

活动的实例是否可以启动到启动它的组件的进程中——true如果可以,false如果不能。默认值为false

通常,活动的一个新实例会启动到定义它的应用程序的进程中,因此该活动的所有实例都在同一个进程中运行。但是,如果将此标志设置为true,则活动的实例可以在多个进程中运行,从而允许系统在任何使用它们的地方创建实例(只要权限允许),这几乎是不必要或不可取的。

我对本文档的阅读是,这可能是我正在寻找的。我更愿意说“活动启动”而不是“活动可以启动”“进入启动它的组件的进程”。

不幸的是,情况似乎并非如此。启动Host活动Guest总是以不同的进程结束,由android.os.Process.myPid().

我已经提出了一对虚拟应用程序,它们应该显示我正在尝试做的事情:

  • 安装Host.
  • 安装并运行Guest
  • 启动的活动将有一个数字(来宾的 pid)和三个按钮。单击前两个中的任何一个都应该启动第二个活动。第二个活动应该显示与第一个活动相同的数字,并且true,这表明主机和来宾正在同一进程中运行。

不幸的是,情况似乎并非如此。

TL;博士

如何让不同活动中的活动在调用者应用程序拥有的同一进程中运行?

android:multiprocess元素上的实际作用是什么activity

编辑:我有一个最小的例子,应该显示我想要的。成功是MainHostActivity显示与 相同的数字MainGuestActivity。数为android.os.Process.myPid()

4

2 回答 2

0

尝试使用相同的证书对两个应用程序进行签名。从http://developer.android.com/guide/components/processes-and-threads.html

您还可以设置 android:process 以便不同应用程序的组件在同一个进程中运行——前提是这些应用程序共享相同的 Linux 用户 ID 并使用相同的证书进行签名。

如果你以后不能控制客人,你可能是 SOOL

于 2013-09-17T11:55:47.713 回答
0

“android:process”和“android:taskAffinity”允许您在同一个包(应用程序)中拥有不同的进程和关联。

“android:multiprocess”只是意味着如果你想允许活动有不同的进程ID。这仅适用于同一个应用程序,而不是当活动从不同的不同包启动时。

你到底想做什么?如果您想共享相同的上下文和私有文件,您应该使用 sharedUserId 代替(您也必须使用相同的证书对其进行签名)。

于 2013-09-16T17:20:18.810 回答