Les deux codes ne sont pertinents que lorsque le téléphone manque de mémoire et tue le service avant qu'il ne finisse de s'exécuter. START_STICKY
indique au système d'exploitation de recréer le service lorsqu'il aura suffisamment de mémoire et d'appeler onStartCommand()
encore une fois avec une intention nulle. START_NOT_STICKY
indique au système d'exploitation de ne pas prendre la peine de recréer le service. Il existe également un troisième code START_REDELIVER_INTENT
qui dit au système d'exploitation de recréer le service et de redonner la même intention à l'utilisateur. onStartCommand()
.
Cet article de Dianne Hackborn explique le contexte bien mieux que la documentation officielle.
Source : http://Android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html
L'élément clé ici est un nouveau code de résultat renvoyé par la fonction, indiquant au système ce qu'il doit faire avec le service si son processus est tué alors qu'il est en cours d'exécution :
START_STICKY est fondamentalement le même que le comportement précédent, dans lequel le est laissé "démarré" et sera redémarré plus tard par le système. La seule différence par rapport aux versions précédentes de la plate-forme est qu'il s'il est redémarré parce que son processus est tué, onStartCommand() sera appelée sur la prochaine instance du service avec un Intent nul au lieu de ne pas être appelée du tout. Les services qui utilisent ce mode doivent toujours vérifier ce cas et le traiter de manière appropriée.
START_NOT_STICKY dit que, après le retour de onStartCreated(), si le processus est tué sans qu'il reste de commandes de démarrage à délivrer, alors le service sera arrêté au lieu d'être redémarré. Cela a beaucoup plus de sens Cela a beaucoup plus de sens pour les services qui sont destinés à ne fonctionner que lorsque l'exécution des commandes qui leur sont envoyées. Par exemple, un service peut être démarré toutes les 15 minutes à partir d'une alarme pour interroger un certain état du réseau. S'il est Si le service est tué pendant qu'il effectue ce travail, il serait préférable de le laisser s'arrêter et de le relancer la prochaine fois que l'alarme sera déclenchée. l'arrêter et le relancer au prochain déclenchement de l'alarme.
START_REDELIVER_INTENT est similaire à START_NOT_STICKY, sauf que si le service est tué avant qu'il n'appelle stopSelf() pour une intention donnée. intention donnée, cette intention lui sera re-délivrée jusqu'à ce qu'elle soit complétée (sauf si après un certain nombre d'essais supplémentaires, elle ne peut toujours pas auquel cas le système abandonne). Ceci est utile pour les services qui qui reçoivent des commandes de travail à faire, et qui veulent s'assurer qu'ils qu'ils finissent par terminer le travail pour chaque commande envoyée.