【问题标题】:How does intents handle multiple services or classes of the same type?意图如何处理相同类型的多个服务或类?
【发布时间】:2011-05-03 13:39:04
【问题描述】:

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

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

谢谢! - 鲍比

【问题讨论】:

    标签: android class service android-intent


    【解决方案1】:

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

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

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

    在任何情况下,(对于任何 1 个服务声明)在任何时候都最多运行一个该服务的副本。您可能会对“远程”流程声明感到疯狂,但我认为仅此而已。

    【讨论】:

    • 很好的答案,谢谢 Femi,这让很多事情变得清晰!干杯! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2015-07-26
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多