1

J'écris un service qui utilise une tâche asynchrone pour effectuer certaines opérations réseau. Supposons que le doInBackground de l'AsyncTask prenne beaucoup de temps et, pendant ce temps, les ressources deviennent faibles et le système d'exploitation arrête le service.Ordre des opérations lorsqu'un service est arrêté

Quand asyncTask est-il tué? Est-ce que l'AsyncTask sera toujours en cours d'exécution quand onDestroy est appelé, ou est ce qu'il se produira après, ou suis-je responsable de l'arrêt de l'AsyncTask? J'essaye de m'assurer que je n'ai pas de conditions de concurrence entre le code dans mon onDestroy et le code dans mon doInBackground.

+0

Juste curieux mais pourquoi utilisez-vous un AsyncTask dans un service? – Squonk

+1

Le service s'exécute dans le même processus que l'application principale, donc je crois que dans ce cas, j'ai besoin d'utiliser un AsyncTask afin que l'accès au réseau du service ne bloque pas le thread ui principal. – lacker

+1

a Un service est déjà en cours d'exécution sur son propre thread. Les tâches asynchrones sont destinées aux activités – Spidy

Répondre

2

L'AsyncTask continuera de fonctionner jusqu'à ce que vous l'annuliez ou que le système détruise le processus qui l'héberge. Le système ne sait pas, en soi, à propos de votre AsyncTask donc il ne va rien faire à ce sujet lors de la fermeture du Service, il ne sait certainement pas que le Service a créé la tâche AsyncTask.

Il est très probable qu'après avoir appelé onDestroy, le processus de l'application sera également détruit, tout comme la tâche asynchrone. Cependant, la stratégie la plus sûre consiste à être proactif et à annuler la tâche asynchrone dans onDestroy.

Une remarque peut-être intéressante est que les requêtes en attente de traitement seront perdues si le processus meurt avant d'être traité. En tant que telles, toutes les opérations envoyées à une asyncTask que doit compléter doivent être écrites dans un journal des tâches persistantes afin qu'elles puissent être réémises si elles ne sont pas terminées.

Questions connexes