2012-05-18 5 views
1

Au fil du temps mon application en utilisant beaucoup d'AsyncTasks, et j'ai remarqué dans le débogueur qu'ils ne disparaissent pas et même quand ils sont faits, ils apparaissent toujours comme un fil de discussion actif. Y a-t-il un moyen, après la tâche, de dire au garbage collector de le tuer?Android: Nettoyer AsyncTask

+0

Copie possible de [AsyncTask en attente?] (Http://stackoverflow.com/questions/8407408/asynctask-keeps-waiting) – kabuko

+0

Rend NULL après l'avoir utilisé, généralement dans la méthode de rappel Activity.onDestroy(). – yorkw

Répondre

1

EDIT: Lenik a souligné ci-dessous que ma réponse initiale n'était pas la bonne façon androïde d'annuler une tâche asynchrone. AsyncTask possède un système complet et élégant pour l'annulation. Appelez la méthode cancel(true) sur votre tâche lorsque vous êtes prêt à annuler. Si vous exécutez une boucle interne, utilisez isCancelled() pour vérifier l'état et quittez la boucle de manière appropriée si elle renvoie true. Cela a l'avantage supplémentaire d'appeler votre méthode onCancelled(Object) sur le thread d'interface utilisateur après cancel(boolean) est appelée et doInBackground(Object[]) est terminée. Définissez ensuite la référence à votre tâche sur null.

Merci Lenik! Si vous postez une réponse, je vais la supprimer pour que vous receviez un crédit.

+1

Y a-t-il une raison d'utiliser 'isInterrupted' au lieu d'exister et de bien documenter' isCancelled() 'et' AsyncTask.cancel() '? – lenik

+0

Je ne savais pas ça, merci! (va réviser ma réponse ou si vous préférez répondre c'est bien aussi.) – objbuilder