2010-02-10 9 views
0

Lorsque je charge mon application, je charge également le service Android qui m'aide à télécharger des fichiers depuis Internet.Fermeture d'un service avec des threads actifs

L'utilisateur peut avoir un ou plusieurs téléchargements à un moment donné, le tout dans son propre thread qui est géré par le service. Si l'utilisateur appuie sur le bouton d'accueil, je ne détruis pas le service mais le laisse fonctionner, cependant, si l'utilisateur appuie sur le bouton retour, j'arrête() le service car je pensais que c'était la bonne chose à faire (l'utilisateur ne voudrait pas que les services errants soient exécutés).

Cela fonctionne bien sauf s'il y a des threads parasites qui ne sont pas encore terminés (ceci peut se produire si la connexion Internet n'est pas active, etc.).

Comment puis-je gérer cela? Comment puis-je arrêter tous les threads car je n'ai aucune référence à eux ... ou en quelque sorte commande Android pour arrêter mon service une fois que tous les threads sont terminés et que mon application est fermée?

+0

Avez-vous essayé d'utiliser Boolean Flags et les avez définis sur true lorsque les téléchargements sont terminés et que vous arrêtez le service uniquement si tous les indicateurs sont définis sur true? –

+0

Non, je n'ai pas essayé ceci – jax

Répondre

1

Ne pas filer les fils par téléchargement. Publiez des travaux dans une file d'attente de travail (par exemple, LinkedBlockingQueue) et utilisez un pool de threads. Faites en sorte que cette file d'attente soit une file d'attente prioritaire, et vous pouvez organiser l'envoi de travaux dans cette file d'attente pour indiquer aux threads d'arrière-plan de s'arrêter après avoir terminé leur téléchargement en cours.

+0

J'ai effectivement utilisé Executors.newCachedThreadPool() mais votre réponse m'a aidé à découvrir cette merveilleuse classe – jax