Qu’est-ce que le service START_STICKY, START_NOT_STICKY et START_REDELIVER_INTENT

Je suis incapable de comprendre

  1. START_STICKY,
  2. START_NOT_STICKY et
  3. START_REDELIVER_INTENT

Quelqu’un peut-il expliquer clairement avec des exemples.

Je suis passé par ce lien mais je ne pouvais pas le comprendre clairement.

Celles-ci sont liées aux services. Nous soaps tous que les services continuent de fonctionner en arrière-plan et qu’ils consumnt de la mémoire à exécuter.

Ainsi, à mesure que l’application s’exécute sur un appareil Android, la mémoire de l’appareil continue de s’affaiblir et, le cas échéant, lorsque la mémoire de l’appareil devient extrêmement basse, le système Android commence à interrompre les processus .

Toutefois, vous pouvez effectuer une tâche importante avec les services, qui peuvent également être interrompus à l’arrêt du service. Ces concepts doivent donc indiquer au système Android les actions que vous souhaitez effectuer lorsque la mémoire de l’appareil est stable et qu’il est prêt à relancer les services.

L’explication la plus simple de ceux-ci pourrait être,

START_STICKY- indique au système de créer une nouvelle copie du service, lorsque la mémoire disponible est suffisante, après avoir récupéré de la mémoire insuffisante. Vous perdrez ici les résultats qui auraient pu être calculés auparavant.

START_NOT_STICKY- indique au système de ne pas se soucier de redémarrer le service, même si sa mémoire est suffisante.

START_REDELIVER_INTENT- indique au système de redémarrer le service après la panne et de redissortingbuer les intentions présentes au moment de la panne.

Eh bien, je lis le fil dans votre lien, et il dit tout.

si votre service est tué par Android en raison de la faible mémoire et qu’Android efface de la mémoire, alors …

  1. STICKY: … Android va redémarrer votre service, car cet indicateur particulier est défini.
  2. NOT_STICKY: … Android ne se souciera pas de recommencer, car le drapeau indique à Android qu’il ne devrait pas déranger.
  3. REDELIVER_INTENT: … Android redémarrera le service ET redissortingbuera la même intention à onStartCommand() du service, car, encore une fois, de l’indicateur.

Les deux codes ne sont pertinents que lorsque le téléphone est à court de mémoire et tue le service avant la fin de son exécution. START_STICKY indique au système d’exploitation de recréer le service après avoir suffisamment de mémoire et appelle à nouveau onStartCommand () avec une intention nulle. START_NOT_STICKY demande au système d’exploitation de ne pas recréer le service à nouveau. Il existe également un troisième code START_REDELIVER_INTENT qui indique au système d’exploitation de recréer le service ET de renvoyer la même intention à onStartCommand ().

Cet article de Dianne Hackborn explique beaucoup mieux le contexte que la documentation officielle.

Source: http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html

La partie 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 supprimé pendant son exécution:

START_STICKY est fondamentalement le même que le comportement précédent, où le service est laissé “démarré” et sera ensuite redémarré par le système. La seule différence avec les versions précédentes de la plate-forme est que si elle est redémarrée parce que son processus est supprimé, onStartCommand () sera appelée sur l’instance suivante du service avec une intention nulle 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 qu’après le retour de onStartCreated (), si le processus est tué sans commandes de démarrage restantes à délivrer, le service sera arrêté au lieu d’être redémarré. Cela a beaucoup plus de sens pour les services destinés à être exécutés uniquement lors de l’exécution de 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 état du réseau. S’il est tué pendant ce travail, il serait préférable de le laisser s’arrêter et de démarrer la prochaine fois que l’alarme se déclenche.

START_REDELIVER_INTENT est similaire à START_NOT_STICKY, sauf si le processus du service est tué avant d’appeler stopSelf () pour une intention donnée, cette intention sera ré-livrée jusqu’à la fin (sauf après plusieurs tentatives, il ne peut toujours pas se terminer). à quel point le système abandonne). Ceci est utile pour les services qui reçoivent des commandes de travail et qui veulent s’assurer qu’ils terminent éventuellement le travail pour chaque commande envoyée.