如果我多次调用context.startForegroundService(startServiceIntent),会多次使用新的服务意图调用onCreate(),还是只会对新的服务意图调用第一次onCreate,然后多次调用onStartCommand()/onHandleIntent()?
startForegroundService()
将触发对onCreate()
的调用。例如:startForegroundService()
onCreate()
onStartCommand()
(可能会触发对其他内容的调用,如IntentService
的onHandleIntent()
)startForegroundService()
onCreate()
调用onStartCommand()
(可能会触发对其他内容的调用,如IntentService
的onHandleIntent()
)stopService()
或stopSelf()
的方式停止您的服务(如果仍在使用IntentService
,则onHandleIntent()
返回)startForegroundService()
,因为您真的喜欢那个方法onCreate()
onStartCommand()
(可能会触发对其他内容的调用,如IntentService
的onHandleIntent()
)onHandleIntent()
。这表明你正在使用IntentService
。如果是这样,那么你的命令是排队的。IntentService
只有一个后台线程。因此它将处理第一个命令。然后,如果有另一个等待的命令,它将处理该命令。这将继续进行,直到没有更多的命令,此时IntentService
调用stopSelf()
并消失。因此,除非你在onHandleIntent()
实现中出错(例如,执行异步工作),否则一次只会处理一个命令。 - CommonsWareService
没有线程。 onStartCommand()
将依次调用,因为它始终在主应用程序线程上调用。两个命令是否并行处理完全取决于您在onStartCommand()
中做什么。例如,如果您启动了两个协程或使用线程池等,那么这两个命令的工作可能会并发进行。 - CommonsWare