如果服务多次启动,会发生什么情况?

如果我有以下代码:

Intent intent = new Intent(this,DownloadService.class); for(int i=0;i<filesArray.length;i++){ startService(intent); } 

在这个代码中, DownloadService扩展了IntentService

所以现在当我打电话startService(intent)这是否意味着我每次启动一个新的服务startService(intent)被称为或这意味着DownloadService运行一次,然后每次我打电话startService(intent)它将只是通过不同的意图与不同的startId。

这是否有意义,这是哪一个呢?

该服务将只在一个实例中运行。 但是,每次启动服务时, onStartCommand()调用onStartCommand()方法。

这是在这里logging

完全正确。 只有一个服务实例为应用程序进程创build。 而当你打电话onStart(); 再次,只有onStartCommand()被调用,并且新的Intent被传递给onStartCommand()方法。

注意: onCreate()不会再被调用。

关于多次调用bindService():

当您多次调用bindService()时,同样只有一个实例用于Service,而Android Runtime将相同的IBinder对象返回给客户端。

意思是,onBind()不会被多次调用。 而只是caching的IBinder对象返回。

在上面的答案中增加一些可能对他人有帮助的信息是startId,onStartCommand()方法接收到的每一个startService()调用都是不同的。 同样,如果我们在上面提到的for循环中写入,在onHandleIntent()中编写的代码会执行循环频率定义的许多次,但是按顺序而不是并行执行。概念是IntentService创build一个工作队列,并且每个请求都会启动()触发onStartCommand(),然后将意图存储在工作队列中,然后将意图逐一传递给onHandleIntent()。