是否有必要在启动或停止服务之前检查已运行的服务列表?

时间:2014-06-16 05:53:11

标签: android service

在浏览代码时我发现在启动或停止服务之前 已进行检查以确认服务是否已在运行或已停止。

这是使用活动管理器完成的,它提供了信息 关于已经在系统中运行服务。

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

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

3 个答案:

答案 0 :(得分:2)

正如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 :(得分:1)

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

  

请注意,对Context.startService()的多次调用不会嵌套(但是   它们会导致对onStartCommand()的多次相应调用,   所以无论启动多少次,服务都会停止   一旦调用了Context.stopService()或stopSelf();但是,服务   可以使用他们的stopSelf(int)方法来确保服务不是   停止,直到开始意图处理。

至于stopService,即使有问题的服务没有按照我的知识运行,它也不会影响任何事情。

答案 2 :(得分:1)

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

调用stopService()对已经停止的服务没有任何影响。就像在已经销毁的Activity上调用onDestroy()一样。