我想每 15 分钟启动一次服务。大多数情况下它会在大约 30 秒内退出,但有时服务会持续超过 15 分钟。如果之前的服务调用仍在运行,我认为警报管理器启动服务并不好。我正在考虑在 onStartCommand 中设置一个标志,让它在服务正在运行时简单地返回而不做任何事情。但我不确定这是否是处理它的最佳方式,因为 onStartCommand 返回一个 int 并且我不知道系统需要这个值。有没有最好的方法来做到这一点?
问问题
762 次
1 回答
1
但是我从 CommonsWare 那里听到:“不,它不会创建新服务。如果服务已经在运行,它将再次使用 onStartCommand() 调用它,以传递新的 Intent,但不会创建第二个副本。”
是的,那个 CommonsWare 家伙,他确实写了很多... :-)
如果之前的服务调用仍在运行,我认为警报管理器启动服务并不好。
如果您正在使用IntentService
,这将不是问题。您的第二个警报的命令将被排队,等待onHandleIntent()
从第一个警报结束。
如果您不使用IntentService
,则需要聪明onStartCommand()
地确定您自己的线程仍在运行,因此您想跳过该命令。
但我不确定这是否是处理它的最佳方式,因为 onStartCommand 返回一个 int 并且我不知道系统需要这个值。
这与你的问题没有任何关系。只需 return super.onStartCommand()
,或者您当前onStartCommand()
返回的任何方法。
但是,如果我不希望该服务在下一次应该被调用之前重新启动怎么办?
好吧,您可以将重复的警报替换为一次性警报(使用set()
),然后设置下一个警报,作为结束前一个警报的工作的一部分。
于 2013-04-16T00:09:15.930 回答