Comment fonctionne AsyncTask sur Android

je veux savoir comment AsyncTask fonctionne en interne.

je sais qu'il utilise le Java Executor pour effectuer les opérations mais encore quelques-unes des questions que je ne comprends pas. Comme:

  1. combien D'AsyncTask peuvent être lancés à la fois dans une application Android?
  2. quand je démarre 10 AsyncTask, est-ce que toutes les tâches seront exécutées simultanément ou une par une?

j'ai essayé avec 75000 AsyncTask de tester la même chose. Je n'obtenez pas de problème et ressemble à toutes les tâches seront poussés à pile et exécuter un par un.

aussi quand je démarre 100000 AsyncTasks, je commence à sortir OutOfMemoryError.

ainsi y a-t-il une limite de no D'AsyncTask qui peut être exécutée à la fois?

Note: j'ai testé ces sur SDK 4.0

18
demandé sur AndroDev 2012-05-07 14:38:24

4 réponses

AsyncTask a une assez longue histoire.

Lorsqu'il est apparu pour la première fois dans Cupcake (1.5), il manipulait les opérations de fond avec un seul thread supplémentaire (un par un). Dans le Donut (1.6) il a été changé, de sorte qu'un pool de fil avait commencé à être utilisé. Et les opérations pouvaient être traitées simultanément jusqu'à épuisement de la réserve. Dans ce cas, les opérations ont été examinées.

depuis que le comportement par défaut de Honeycomb est commuté de nouveau à l'utilisation d'un seul thread worker (un par un traitement.) Mais la nouvelle méthode (executeOnExecutor) est introduit pour vous donner la possibilité d'exécuter des tâches simultanées si vous le souhaitez (il y a deux exécuteurs standards différents: SERIAL_EXECUTOR et