2012-03-15 3 views
2

La tâche asynchrone android est-elle lente ou suis-je en train de faire quelque chose de mal?La tâche asynchrone android est-elle lente?

Voici ce que je fais

Log.e("Filler", "before"); 
new DownloadListContent().execute("string"); 
Log.e("Filler", "after"); 

et DownloadListContent() ..

class DownloadListContent extends AsyncTask<Object, Object, Object> { 
    protected Void doInBackground(Object... urls) {    
    Log.e("Filler", "Am in doInBackground"); 

.... 
} 

Et voici le LogCat.

03-15 23:18:**47**.598: E/Filler(17150): before 
03-15 23:18:**47**.598: E/Filler(17150): after 
03-15 23:18:**59**.789: E/Filler(17150): Am in doInBackground 

Cela se produit 12 secondes avant la mise en arrière-plan. Pourquoi cela se produit-il?

En attendant, j'ai d'autres instances de autres classes d'AsyncTask effectuer d'autres tâches réseau. Est-ce que AsyncTask affecte les uns les autres?

Je ne peux vraiment pas comprendre ça!

MISE À JOUR

Merci pour les commentaires. semble que async a une limite stricte sur combien de threads fonctionnera en même temps. C'est un tueur si vous devez télécharger un tas d'images en même temps avec vos données.

En suivant la méthode de CommonsWare here Je peux séparer le type de asyncTask de sorte qu'un type (images) ne bloque pas un autre type (liste de données).

+0

est que sur un téléphone réel ou sur l'émulateur? L'émulateur est lent, en fonction du matériel de votre ordinateur. –

+0

non je suis en train de tester sur un HTC Desire.12 secondes sont tellement lent! Y at-il une limite stricte sur combien de tâches asynchrones sont autorisés à fonctionner en même temps? – weakwire

+2

Montrez tout votre code pour la classe. Rappelez-vous qu'il n'y a que peu de ressources à obtenir telles que le processeur, la mémoire ou même la bande passante (qui peut varier en fonction de l'emplacement ou si sur le wifi). Vous pouvez constater que cette tâche attend que les autres finissent pour avoir accès aux choses liées au réseau, mais c'est une supposition, pas un fait, car nous avons besoin de plus de code. –

Répondre

5

À droite, le nombre de threads est limité. Sur Honeycomb, la taille du pool est de un, donc vous ne pouvez pas avoir deux tâches en même temps. Vous pouvez cependant fournir votre propre exécuteur, pour que plusieurs tâches soient exécutées en parallèle. Cela pourrait ne pas améliorer les performances, donc vous devriez peut-être penser restructurer votre code un peu:

http://developer.android.com/reference/android/os/AsyncTask.html#executeOnExecutor(java.util.concurrent.Executor, Params ...)

Questions connexes