0

J'essaye d'avoir une connexion bidirectionnelle entre 2 appareils, l'un sera le serveur et l'autre le client. Comme il est bidirectionnel, les deux peuvent envoyer une donnée de réception.Android IntentService appel

Je les crée dans une activité que j'ai, qui répertorie les applications installées que j'ai sur mon téléphone (filtré les applications du système). Ensuite, j'ai un adaptateur pour cette liste, où je définis un écouteur pour les éléments de cette liste. Fondamentalement, si j'appuie sur l'un des éléments de la liste, je veux envoyer un message à l'autre périphérique. Donc, si à l'intérieur de la méthode onHandleIntent() j'attends les messages, où dois-je mettre le code pour ENVOYER des messages?

EDIT: Je pourrais créer un autre service pour la partie d'envoi mais cela me ferait créer 4 services, 2 pour le client (envoyer et recevoir) et un autre 2 pour le serveur (envoyer et recevoir à nouveau).

Répondre

0

Un IntentService a le comportement suivant:

Toutes les demandes sont traitées sur un seul thread de travail - ils peuvent prendre aussi longtemps que nécessaire (et ne bloque pas la boucle principale de l'application), mais une seule demande sera traité à la fois.

de the docs. Le même IntentService n'est pas censé faire 2 choses en même temps - s'il écoute (je suppose une boucle while onHandleIntent?), Alors tous les messages que vous envoyez à ce IntentService pendant qu'il écoute ne seront pas traités. Ils seront mis en file d'attente jusqu'à ce que l'écoute soit terminée, puis envoyés. Vous pouvez créer deux services IntentServices (un pour l'envoi, un pour la réception) ou créer un nouveau service qui créera ses propres threads pouvant envoyer et écouter simultanément.

J'imagine que l'envoi et la réception par des services différents seraient plus faciles.

+0

Merci beaucoup pour votre aide! Je vais suivre votre conseil et utiliser deux IntentService différents (pour envoyer et recevoir). Peut-être qu'un jour je vais vérifier si avoir un service avec 2 threads serait plus efficace ou non. Encore une fois, merci beaucoup pour le conseil, j'étais un peu coincé. Je suis nouveau ici et je ne sais pas si mes votes vous aideront, mais j'espère qu'ils le font :) –

+0

Je n'ai pas encore testé, mais je pense qu'il pourrait y avoir quelques problèmes avec l'utilisation de deux IntentServices (et l'établissement de la connexion dans le Méthode onStartCommand - Sockets et flux objets -), car il me fera avoir deux ensembles de sockets pour les mêmes deux appareils. Je ne sais pas si cela sera problématique. Alors peut-être qu'un service avec deux threads à l'intérieur serait mieux, parce que de cette façon, vous pourriez utiliser le même socket et les flux d'objets. –

+0

J'ai également eu un service qui a fait une sorte de lecture/écriture simultanée à un flux. Ce que j'ai fait, c'est avoir un Service (pas IntentService) qui génère un Thread d'écoute au démarrage, et le tue lorsqu'il est arrêté. Quelque chose comme ça peut ou peut ne pas fonctionner pour vous, mais cela a du sens pour moi :) – Bob