0

我想每 15 分钟启动一次服务。大多数情况下它会在大约 30 秒内退出,但有时服务会持续超过 15 分钟。如果之前的服务调用仍在运行,我认为警报管理器启动服务并不好。我正在考虑在 onStartCommand 中设置一个标志,让它在服务正在运行时简单地返回而不做任何事情。但我不确定这是否是处理它的最佳方式,因为 onStartCommand 返回一个 int 并且我不知道系统需要这个值。有没有最好的方法来做到这一点?

4

1 回答 1

1

但是我从 CommonsWare 那里听到:“不,它不会创建新服务。如果服务已经在运行,它将再次使用 onStartCommand() 调用它,以传递新的 Intent,但不会创建第二个副本。”

是的,那个 CommonsWare 家伙,他确实写了很多... :-)

如果之前的服务调用仍在运行,我认为警报管理器启动服务并不好。

如果您正在使用IntentService,这将不是问题。您的第二个警报的命令将被排队,等待onHandleIntent()从第一个警报结束。

如果您不使用IntentService,则需要聪明onStartCommand()地确定您自己的线程仍在运行,因此您想跳过该命令。

但我不确定这是否是处理它的最佳方式,因为 onStartCommand 返回一个 int 并且我不知道系统需要这个值。

这与你的问题没有任何关系。只需 return super.onStartCommand(),或者您当前onStartCommand()返回的任何方法。

但是,如果我不希望该服务在下一次应该被调用之前重新启动怎么办?

好吧,您可以将重复的警报替换为一次性警报(使用set()),然后设置下一个警报,作为结束前一个警报的工作的一部分。

于 2013-04-16T00:09:15.930 回答