在浏览代码时我发现在启动或停止服务之前 已进行检查以确认服务是否已在运行或已停止。
这是使用活动管理器完成的,它提供了信息 关于已经在系统中运行服务。
我想知道这项检查是否必要?
答案 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()
一样。