如果服务多次启动,会发生什么情况?
如果我有以下代码:
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()。