Comment faire pour récupérer des données vers/à partir d'une prise dans un thread?
Android noob ici. J'apprends le mieux en voyant le code source d'une fonctionnelle exemple, mais j'ai été incapable de trouver une simple-mais-exemple complet d'utilisation d'un socket dans son propre thread.
J'ai un Android de service qui doit communiquer avec l'Internet. Je veux ouvrir un socket TCP, qui se connecte à un serveur sur Internet. Le service a besoin d'envoyer des données sur Internet, de données et de revenir sur le net besoin d'aller dans le service. Depuis que le service est en train de faire d'autres choses, la connexion de socket a besoin de vivre dans son propre thread.
Une idée d'où je pourrais trouver un exemple d'un socket dans un thread de communication/de la prise de courant?
Grâce
OriginalL'auteur Lance Lefebure | 2010-12-05
Vous devez vous connecter pour publier un commentaire.
Il vous suffit de créer une tâche asynchrone qui communique en arrière-plan, puis met à jour le thread d'INTERFACE utilisateur en tant que de besoin. Voici le thread d'arrière-plan pour obtenir des informations à partir d'une prise et mise à jour d'un affichage de texte avec le nombre d'octets qu'il récepteurs
Et voici comment vous le coup de que la fil de
Vous pouvez définir toutes les autres méthodes sur votre async tâche que vous voulez. Je sais que les doInBackground() la méthode est la seule qui est exécuté sur un thread séparé. Vous pouvez également passer dans les données que vous souhaitez envoyer dans le constructeur ou à la méthode execute ().
Quand j'ouvre un socket dans doInBackground(), que le nouveau thread va être bloqué jusqu'données sur la socket. Lorsque les données arrivent, je peux vous l'envoyer pour le thread d'INTERFACE utilisateur via publishProgress. Depuis le socket a été créé sur ce thread, comment pourrais-je envoyer des données à la prise de la thread de l'INTERFACE utilisateur? Je fais face à un flux de données, de sorte que l'envoi de paramètres avec le execute() la commande est bonne, mais j'ai besoin de continuellement envoyer des données à la prise de courant.
Vous traiter la tâche comme tout autre objet, et de donner des données de la manière normale. Il vient s'exécute dans un thread séparé.
je pense qu'il y a une faute de frappe dans
InternetTask
constructeur. il devrait êtrepublic InternetTast(TextView view)
paspublic LoginTask(TextView view)
OriginalL'auteur Brian Griffey
Ici est un long blog sur ce sujet, où à la fois le serveur et le client les pièces sont montrant, avec le support de communication en allant sur un thread séparé.
http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/
Une chose à prendre en compte est que si vous êtes de passage à
int
s vous pouvez exécuter dans un ordre d'octet problème, donc, il suffit de faire quelques tests et je vous suggère de vous assurer que le serveur envoie dans le format que l'Android besoins, dans le cas où vous avez des serveurs sur plusieurs OS.D'une manière simple, sur Android pour trouver l'octet de commande, vous pouvez utiliser ceci: http://developer.android.com/reference/java/nio/ByteOrder.html
Selon cet article, l'ordre des octets peut être échangé pour de l'optimisation:
http://en.wikipedia.org/wiki/Dalvik_(logiciel)
Vous pouvez utiliser la Vue.post, pour en revenir au thread de l'INTERFACE utilisateur, mais cette page peut vous aider d'une autre manière: developer.android.com/guide/appendix/faq/...
OriginalL'auteur James Black