(Android)如何运行服务的多个实例

(Android)如何运行服务的多个实例,android,Android,任何人都知道我如何使同一服务类别的多个实例分别工作,我正在开发一个出租车计价器应用程序,其中我有一个“计数器”服务,它将为我计算距离,并将每个客户的位置添加到数据库中,在我的主要活动中,我为同一个服务创建了三个实例,并分别启动了每个人,但它似乎没有如预期的那样工作(只有我在每个服务启动操作中干杯,但它似乎只针对一个客户)。 我知道我在几篇文章中读到,不可能让多个服务实例同时工作,但这是我能做的唯一方法,使出租车计价器同时支持多个客户。正如正确指出的,我们不能有多个服务实例。一个服务只能有一个实例

任何人都知道我如何使同一服务类别的多个实例分别工作,我正在开发一个出租车计价器应用程序,其中我有一个“计数器”服务,它将为我计算距离,并将每个客户的位置添加到数据库中,在我的主要活动中,我为同一个服务创建了三个实例,并分别启动了每个人,但它似乎没有如预期的那样工作(只有我在每个服务启动操作中干杯,但它似乎只针对一个客户)。
我知道我在几篇文章中读到,不可能让多个服务实例同时工作,但这是我能做的唯一方法,使出租车计价器同时支持多个客户。

正如正确指出的,我们不能有多个服务实例。一个服务只能有一个实例。每次后续调用startService,都会再次调用onStartCommand方法

但是,假设onstart命令实例化一个计时器对象,以每30秒重复一次任务。每次对startService的后续调用,都会创建一个新的对象计时器实例

现在,请遵循以下用例:

  • 计时器设置为每30秒记录一次“Hello World”

  • 第一个startService命令于16:00:00发出

  • 在接下来的2分钟内,您将看到在

  • -16:00:00

    -16:00:30

    -16:01:00

    -16:01:30

    -16:02:00

  • 现在,第二个startService命令在16:02:10发出,在接下来的2分钟内,您将看到“Hello World”打印如下:
  • -16:02:10(第二次呼叫)

    -16:02:30(第一次呼叫)

    -16:02:40(第二次呼叫)

    -16:03:00(第一次呼叫)

    -16:03:10(…)

    -16:03:30

    -16:03:40

    -16:04:00


    所以在第二次调用之后,Timer类的两个实例就存在了。但是只有一个服务实例。

    正如正确指出的,我们不能有多个服务实例。一个服务只能有一个实例。每次后续调用startService,都会再次调用onStartCommand方法

    但是,假设onstart命令实例化一个计时器对象,以每30秒重复一次任务。每次对startService的后续调用,都会创建一个新的对象计时器实例

    现在,请遵循以下用例:

  • 计时器设置为每30秒记录一次“Hello World”

  • 第一个startService命令于16:00:00发出

  • 在接下来的2分钟内,您将看到在

  • -16:00:00

    -16:00:30

    -16:01:00

    -16:01:30

    -16:02:00

  • 现在,第二个startService命令在16:02:10发出,在接下来的2分钟内,您将看到“Hello World”打印如下:
  • -16:02:10(第二次呼叫)

    -16:02:30(第一次呼叫)

    -16:02:40(第二次呼叫)

    -16:03:00(第一次呼叫)

    -16:03:10(…)

    -16:03:30

    -16:03:40

    -16:04:00


    所以在第二次调用之后,Timer类的两个实例就存在了。但是只有一个服务实例。

    不能运行同一服务的多个实例。但是,有很多其他的方法可以解决你的问题。运行单个服务,但传递不同的消息有效负载以标识客户端。这意味着您的客户端需要本地绑定到服务。这是一个非常粗糙的解决方案。请尝试一下并权衡一下您的用例谢谢,我会尝试一下,您不能运行同一服务的多个实例。但是,有很多其他的方法可以解决你的问题。运行单个服务,但传递不同的消息有效负载以标识客户端。这意味着您的客户端需要本地绑定到服务。这是一个非常粗糙的解决方案。请尝试一下并权衡一下您的用例谢谢,我会尝试,我发现这不是一个潜在的解决方案,而是一个必须解决的错误。在我的实现中,我必须确保在后续调用中不会重新创建计时器对象。但是,这篇文章可能会为下面的一些人找到一些积极的实现方式!我发现这不是一个潜在的解决方案,而是一个必须解决的错误。在我的实现中,我必须确保在后续调用中不会重新创建计时器对象。但是,这篇文章可能会为下面的一些人找到一些积极的实现方式!