意图如何处理同一类型的多个服务或类?

时间:2011-05-03 13:39:05

标签: android class service android-intent

假设我有一个应用程序,其中有一个服务在循环中运行,此服务由intent启动。然后,我有另一个应用程序(相同,但具有不同的AppID)想要启动相同的服务,而主要服务仍在运行。意图如何处理这个? (注意:我希望两个服务同时运行......)

我正在寻找一个可以理解的答案来解释它背后的“如何”,而不是那么多:“好吧,这段代码可以解决这个问题!”。如果你的答案不适合我的例子,这没有问题,因为我仍然很新,我的问题可能会以一种奇怪的(甚至是愚蠢的)方式被问到,我事先道歉。

谢谢! - 鲍比

1 个答案:

答案 0 :(得分:0)

必须在AndroidManifest.xml中声明服务:这指定了Service类。您可以使用显式Intent(指定服务类(以及可选的组件名称))或使用与服务关联的IntentFilter匹配的Intent来启动服务。

案例1使用显式Intent。如果只有一个应用程序将该类注册为服务,则在第二个应用程序中,您将必须使用具有ComponentName的Intent,该组件将启动该服务的第一个应用程序副本。在这种情况下,该Service类只有1个实例处于活动状态。如果两个应用程序都将该类注册为服务,则您的意图将启动该Service类的第二个实例。

案例2使用的是IntentFilter。如果两个Service声明都使用相同的IntentFilter,那么IntentFilter优先级就会启动:具有更高优先级的Service声明将触发,并且基本上总是会赢,因此您将只运行该Service类的一个实例。如果两个服务声明具有相同的优先级,那么它就会被使用一个折腾。

在任何情况下,(任何1个服务声明)最多只能运行一次该服务的副本。你可以对“远程”流程声明感到疯狂,但我认为这就是它。