Comment fonctionne le multi-threading travailler dans Android?
Je suis en train de lancer 4 threads en parallèle, mais à défaut d'.
J'ai essayé d'utiliser synchrone wait()
et notify()
CyclicBarrier
ThreadPoolExecutor
CountDownLatch
AsyncTask
et beaucoup d'autres, mais ne pas gérer l'exécution des threads en parallèle.
Pouvons-nous courir 4 threads en parallèle (c'est à dire au même moment sur android)? Comment?
Note: je suis en train de travailler avec le Streaming Audio à l'aide de AudioRecord
et AudioTrack
de l'API.
Pouvez-vous expliquer quel est le problème?
Je ne suis pas en mesure d'exécuter toutes les 4 threads à la fois. Comment atteindre cet objectif ?
Je ne suis pas en mesure d'exécuter toutes les 4 threads à la fois. Comment atteindre cet objectif ?
OriginalL'auteur Rahul Baradia | 2012-12-27
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez exécuter 4 threads en parallèle. L'ajout de plus de threads permet habituellement, mais à un certain point, ils provoquent une dégradation des performances. Mais 4 fils ne va pas causer un problème.
Si votre objectif est simplement d'avoir tous les threads activement traitement, je vous suggère de regarder Java les pools de threads (et Les exécuteurs plus généralement).
Oui, Android supporte le Multithreading. Le moyen le plus préféré de mise en oeuvre(autres que de Pool de Threads et Exécuteur testamentaire) est AsyncTask
AsyncTask vous permet de mettre en œuvre
doInBackground()
, où votre thread peut manivelle de loin à sa tâche. Ceci est similaire à la fonctionnalité que vous obtenez à partir deThread
.La vraie magie qui se passe quand vous remplacez
onPreExecute()
etonPostExecute()
, qui sont à la fois exécuté sur le thread d'INTERFACE utilisateur. Cela devrait vous empêcher de faire des messages à propos de votre Activité n'étant pas jointe.ce réponse contient un petit exemple de code pour
AsyncTask
qui pourrait vous aider à démarrer.Aussi, jetez un oeil à Les gestionnaires d' dans Android
Edit- Ce que j'ai trouvé lors de mes recherches, c'est que l'enregistrement, l'envoi et la réception audio sont tous les processus interactifs et ils ont besoin de synchronisation et de IO ressources. La meilleure solution possible pourrait être, vous pouvez créer des AsyncTask pour chacune des opérations, de sorte que chaque opération est effectuée dans sa salle de AsyncTask.
Je n'ai pas eu de problème avec Async bien que la tâche, si vous voulez utiliser des threads simultanés, vous pourriez avoir un coup d'oeil au pool de threads et les exécuteurs.
J'ai essayé ça aussi.. je suis l'enregistrement des données audio de 16 ko par 40ms. Sa prend du temps à tourner un autre thread parallèle.
ce que vous êtes exécution de rapprochement avec l'enregistrement audio. il pourrait y avoir quelques problèmes de synchronisation.
il pourrait y avoir un blocage situtation parce que toutes les opérations que vous avez mentionnés sont donc interactif et ils ont tous besoin de l'utilisation des ressources du système. Je vais regarder comment pouvons-nous résoudre ce problème et je vais revenir à vous. mais c'est vraiment une tâche complexe à faire.
OriginalL'auteur Sahil Mahajan Mj
OriginalL'auteur Blackbelt
Vous pouvez utiliser Asynchrone Tâche à exécuter en parallèle.
Cela devrait être un commentaire s'il vous plaît!!
OriginalL'auteur Taruni