"Se você iniciar um serviço android com startService(..)
esse serviço permanecerá em execução até que você invoque explicitamente stopService(..)
. Há dois motivos pelos quais um serviço pode ser executado pelo sistema. Se alguém chamar Context.startService()
, o sistema irá recuperar o serviço (criando-o e chamando seu onCreate()
método se necessário) e, em seguida, chamar seu onStartCommand(Intent, int, int)
método com os argumentos fornecidos pelo cliente. Nesse ponto, o serviço continuará em execução até Context.stopService()
ou stopSelf()
seja chamado. Observe que várias chamadas para Context.startService()
não se aninham (embora resultem em várias chamadas correspondentes para onStartCommand()
), portanto, não importa quantas vezes ele seja iniciado, um serviço será interrompido uma vez Context.stopService()
ou stopSelf()
chamado; no entanto, os serviços podem usar seusstopSelf(int)
método para garantir que o serviço não seja interrompido até que os intents iniciados tenham sido processados.
Os clientes também podem usar Context.bindService()
para obter uma conexão persistente com um serviço. Da mesma forma, isso cria o serviço, se ainda não estiver em execução (chamando onCreate()
ao fazer isso), mas não chama onStartCommand()
. O cliente receberá o IBinder
objeto que o serviço retorna de seu onBind(Intent)
método, permitindo que o cliente faça chamadas de volta para o serviço. O serviço permanecerá em execução enquanto a conexão for estabelecida (independentemente de o cliente manter ou não uma referência no serviço IBinder
). Normalmente, o IBinder
retornado é para uma interface complexa que foi escrita em AIDL.
Um serviço pode ser iniciado e ter conexões vinculadas a ele. Nesse caso, o sistema manterá o serviço em execução, desde que seja iniciado ou haja uma ou mais conexões com o Context.BIND_AUTO_CREATE
sinalizador. Assim que nenhuma dessas situações for mantida, o onDestroy()
método do serviço é chamado e o serviço é encerrado efetivamente. Toda a limpeza (interromper threads, cancelar o registro de receptores) deve ser concluída ao retornar de onDestroy()
. "