9
votes

Deuxième masque d'asynchronisation n'exécute pas

J'ai 2 asyncktask, une création d'une prise de courant et une autre autre qui transmet des objets à l'aide de ces sockets. Mon code est le suivant: XXX

Toutefois, le AsynccTask appelé socketConnector n'est jamais créé ou exécuté. J'ai essayé de changer la commande, puis de l'émetteur n'est pas créé ou exécuté ...

Qu'est-ce qui ne va pas avec ça?


0 commentaires

5 Réponses :


1
votes

Avez-vous essayé d'exécuter émetteur dans du connecteur oiPostexecute () ou vice versa?


1 commentaires

n'est pas possible car les deux les deux asynctaques ont bloqué et peuvent être infinis.



2
votes

Étant donné que je ne sais pas quel niveau de l'API que vous utilisez, je vous suggérerais de passer par async tâche

Selon la documentation:

Lors de la première introduction, les masques d'asynchronisation ont été exécutés en série sur un seul fil d'arrière-plan. À partir de beignet, cela a été changé en un pool de fils permettant de fonctionner plusieurs tâches en parallèle. À partir d'une nid d'abeille, les tâches sont exécutées sur un seul fil pour éviter les erreurs d'application courantes causées par une exécution parallèle.

Si vous voulez vraiment une exécution parallèle, vous pouvez appeler exécuteonexecuteur (java.util.concurrent.executor, objet []) avec thread_pool_executor.


0 commentaires

0
votes

Comme Robin Chandander a dit, il est probablement courant en série et vous pouvez utiliser ExecuteOneXecutor ... mais ce n'est pas disponible avant Android 3.0. Si vous souhaitez une compatibilité complète, vous devez vider asyncktask et utiliser exécutable . Si vous devez signaler les résultats sur le thread d'interface utilisateur, n'oubliez pas d'utiliser un gestionnaire .


0 commentaires

12
votes

Je l'ai détesté lorsque le peigne de miel a changé la multiple exécution d'asyncaptage de la simultanée en séquentielle. Donc, chaque fois que j'exécute une analyse d'asyncaptage, je fais quelque chose comme ça. XXX

Mais la taille du pool de threads est 5, si vous ajoutez la sixième tâche, elle sera ajoutée dans une file d'attente et ne pas être exécuté tant que l'un des 5 threads ait fini.


1 commentaires

Wow tu es génial !! Merci! cela a vraiment travaillé et fait ma journée ^^



1
votes

J'avais écrit une classe d'exécution d'asynctacterie simultanément.

Vérifiez-le: P>

Android-AsynccTask-ExecutTk-Exécuteur H2>

Il prend tout le travail pour exécuter l'asyncaptage simultanément sur n'importe quelle version du système d'exploitation Android, il est préférable d'utiliser: P>

AsyncTaskExecutor.executeConcurrently(task, params);


0 commentaires