"Si vous démarrez un service Android avec startService(..)
ce service restera en cours d'exécution jusqu'à ce que vous l'appeliez explicitement stopService(..)
. Il existe deux raisons pour lesquelles un service peut être exécuté par le système. Si quelqu'un appelle, Context.startService()
le système récupérera le service (en le créant et en appelant sa onCreate()
méthode si nécessaire), puis appelez sa onStartCommand(Intent, int, int)
méthode avec les arguments fournis par le client. À ce stade, le service continuera à s'exécuter jusqu'à ce que Context.stopService()
ou stopSelf()
soit appelé. Notez que plusieurs appels à Context.startService()
ne pas imbriquer (bien qu'ils entraînent plusieurs appels correspondants à onStartCommand()
), donc non peu importe combien de fois il est démarré, un service sera arrêté une fois Context.stopService()
ou stopSelf()
est appelé; cependant, les services peuvent utiliser leurstopSelf(int)
pour garantir que le service n'est pas arrêté tant que les intentions de démarrage n'ont pas été traitées.
Les clients peuvent également utiliser Context.bindService()
pour obtenir une connexion permanente à un service. Cela crée également le service s'il n'est pas déjà en cours d'exécution (appelant onCreate()
en faisant cela), mais n'appelle pas onStartCommand()
. Le client recevra l' IBinder
objet que le service retourne à partir de sa onBind(Intent)
méthode, permettant au client de faire ensuite des appels vers le service. Le service restera en cours d'exécution tant que la connexion est établie (que le client conserve ou non une référence sur le service IBinder
). Habituellement, le résultat IBinder
est pour une interface complexe qui a été écrite en AIDL.
Un service peut être à la fois démarré et avoir des connexions liées à celui-ci. Dans un tel cas, le système maintiendra le service en cours d'exécution tant qu'il est démarré ou qu'il y a une ou plusieurs connexions avec l' Context.BIND_AUTO_CREATE
indicateur. Une fois qu'aucune de ces situations ne tient, la onDestroy()
méthode du service est appelée et le service est effectivement terminé. Tous les nettoyages (arrêt des threads, annulation de l’enregistrement des récepteurs) doivent être terminés au retour onDestroy()
. »