2014-06-16 30 views
0

在查看代码时,我发现在开始或停止服务 之前,已经进行了检查以确认服务是否已经运行或已经停止。启动或停止服务之前是否需要检查已经运行的服务列表?

这是通过使用活动管理器完成的,该活动管理器提供有关已在系统中运行的服务的信息 。

我想知道这个检查是否有必要?

  1. 如果我为已经运行的服务调用startService(),会发生什么?
  2. 如果我为已经停止的服务调用stopService()会发生什么?

回答

1

因为它在Android文档中提到

注意,要Context.startService多次调用()不窝(虽然 它们导致多个相应的调用onStartCommand()), 所以没有事件启动多少次,服务将被停止 一旦调用了Context.stopService()或stopSelf(),然而,服务 可以使用它们的stopSelf(int)方法来确保服务不是 ,直到已处理启动意图。

所以对你的问题

what would happen if I call startService() for an already running service ? 

onStartCommand()被一次又一次地叫,但一旦启动服务无法重新启动或嵌套

如果我叫stopService会发生什么( )已经停止 服务?

当你把它叫做第一onDestroy()方法被调用和以后的调用会被忽略服务犯规存在任何一般更

1

如果服务正在运行,它不会创建另一个实例,但仍在现有实例上调用onStartCommand()。
您可以查看Service Life cycle了解更多详情。

注意,要Context.startService多次调用()不窝(虽然 它们导致对onStartCommand()多次调用对应的), 所以无论多少次启动一个服务将被停止一旦调用了Context.stopService()或stopSelf(),然而,服务 可以使用它们的stopSelf(int)方法来确保服务不是 ,直到已处理启动意图。

至于stopService,它不会影响任何东西,即使有问题的服务没有运行在我的知识。

+0

服务用户不需要检查服务是否正在运行与否,但这取决于服务的实施方式。服务最重要的部分之一是处理多个请求(多线程),所以也许没有考虑到这种服务,因为它不是服务的强制要求。 – nyarlathotep77

1

服务将只运行一次,无论您拨打多少次startService()

调用stopService()将不会对已经停止的服务产生影响。它像在已销毁的活动上调用onDestroy()一样。

相关问题