Meilleure pratique pour que le client Android communique avec un serveur à l'aide de threads

Je fais construire une application android qui communique avec un serveur sur une base régulière, tant que l'application est en cours d'exécution.

Pour ce faire, j'initier une connexion vers le serveur au démarrage de l'application, puis j'ai séparé thread pour la réception de messages appelé ReceiverThreadce thread lit le message de la socketles analyse et les transmet à la partie appropriée de la demande.

Ce thread s'exécute dans une boucle, la lecture de ce qu'il a à lire, puis se bloque sur le read() de commande jusqu'à ce que de nouvelles données arrivent, de sorte qu'il passe la plupart de son temps bloqué.

- Je gérer l'envoi de messages par le biais d'un thread différent, appelé SenderThread. Ce que je me demande est: dois-je structurer le SenderThread dans un mode similaire? Sens dois-je entretenir une certaine forme une file d'attente pour ce fil, laissez-lui envoyer tous les messages dans la file d'attente, puis bloquer jusqu'à ce que de nouveaux messages dans la file d'attente, ou devrais-je viens de démarrer une nouvelle instance de la thread à chaque fois qu'un message doit être envoyé, le laisser envoyer le message, puis "mourir"? Je me penche vers la première approche, mais je ne sais pas ce qui est réellement mieux à la fois en terme de performance (en gardant un thread bloqué dans la mémoire contre l'initialisation de nouveaux threads), et en termes d'exactitude du code.

Aussi depuis toutes mes activités doivent être en mesure d'envoyer et de recevoir des messages, je suis titulaire d'une référence à deux fils dans mon Application classe, c'est qu'une approche acceptable ou dois-je la mettre en œuvre différemment?

Un problème que j'ai rencontré avec ce qui est parfois si je ferme mon application et l'exécuter à nouveau, j'ai fait deux instances de ReceiverThread, si je reçois quelques messages deux fois.

Je suppose que c'est parce que mon application n'a pas fait de fermer et de le thread précédent était encore active (bloqué sur le read() de l'opération), et quand j'ai ouvert à nouveau l'application d'un nouveau fil a été initialisé, mais les deux sont connectés au serveur si le serveur a envoyé le message à la fois. Des conseils sur la façon de contourner ce problème, ou sur la façon de complètement ré-organiser de sorte qu'il sera correct?

J'ai essayé de regarder ces questions, mais a trouvé des exemples contradictoires pour ma première question, et rien de ce qui est utile assez et s'applique à ma deuxième question...

source d'informationauteur Bob