112 votes

Les threads AsyncTask ne meurent jamais (Android)

Je suis nouveau sur Android programmation et je suis à l'aide d' AsyncTasks pour aller chercher des données dans la réponse à l'utilisateur d'appuyer sur un bouton. Cela fonctionne bien et maintient l'interface réactive lors de l'extraction des données, mais quand j'ai regardé ce qui se passait dans le débogueur Eclipse, j'ai découvert que chaque fois qu'un nouveau AsyncTask a été créé (ce qui est assez souvent, car ils ne peuvent être utilisés qu'une seule fois), un nouveau fil a été créé, mais jamais terminé. Le résultat est un grand nombre de AsyncTask fils juste assis là. Je ne suis pas sûr si c'est un problème dans la pratique ou non, mais j'aimerais vraiment me débarrasser de ceux d'autres threads. Comment puis-je tuer ces fils?

Merci!

202voto

CommonsWare Points 402670

AsyncTask gère un pool de threads, créé avec ThreadPoolExecutor . Il aura de 5 à 128 threads. S'il y a plus de 5 threads, ces threads supplémentaires resteront au maximum 10 secondes avant d'être retirés. (note: ces chiffres concernent le code source ouvert actuellement visible et varient selon la version d'Android).

Laissez les threads AsyncTask seuls, s'il vous plaît.

24voto

Tom de Waard Points 283

En plus de la réponse de CommonsWare:

Actuellement, j'utilise Android 2.2 et mon application n'utilise pas plus d'une AsyncTask à tout moment, mais j'en crée une toutes les x minutes. Au début, les nouveaux threads AsyncTask commencent à apparaître (un nouveau thread pour une nouvelle AsyncTask) mais après 5 threads (comme mentionné par CommonsWare), ils restent visibles dans la fenêtre de débogage et sont réutilisés lorsque de nouveaux threads AsyncTask sont nécessaires. Ils restent juste là jusqu'à ce que le débogueur se déconnecte.

3voto

karnbo Points 41

Même symptôme ici. Dans mon cas les fils pendu après que j’avais tué l’activité, et je m’attendais à l’App de fermer complètement. Problème résolu en partie en utilisant un seul exécuteur fileté :

Cela fait le fil à disparaître après l’exécution des travaux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X