La meilleure façon pour le service qui commence l'activité de communiquer avec elle

StackOverflow https://stackoverflow.com/questions/2274641

  •  20-09-2019
  •  | 
  •  

Question

I ai un service qui écoute sur une prise. Lors de la réception certaine entrée est de créer une activité. Lors de la réception autre entrée, il est de tuer cette activité. J'ai lutté pendant un certain temps pour rendre le service communiquer avec l'activité par AIDL ( http : //developer.android.com/guide/developing/tools/aidl.html ), mais cela semble ne pas être efficace. Je pense que AIDL est efficace lorsque le processus qui doit être parlé est un service, pas quand il est une activité? J'aimerais quelques directions ou des suggestions sur la façon de résoudre mon problème.

Cheers,

Était-ce utile?

La solution

  

J'ai un service qui écoute un   prise. Lors de la réception certaine entrée   il est de créer une activité.

S'il vous plaît faire ce configurable. Services ne devraient pas être démarrer des activités, sauf dans très circonstances inhabituelles (par exemple, la prise est une connexion SIP et vous créez un client VOIP). Surgissant une activité interrompt l'utilisateur dans tout ce qu'ils font.

  

Lors de la réception autre entrée, il est à   tuer cette activité.

Le seul scénario que je l'ai vu lorsque cela est un motif valide a rejeté l'écran d'appel lorsque l'autre partie raccroche la ligne. Si vous créez un client VOIP, votre modèle proposé devrait être OK, mais sinon, s'il vous plaît revenir ayant l'activité disparaître au milieu de l'utilisateur de l'utiliser.

  

Je pense que AIDL est efficace lorsque   le processus qui doit être parlé est   un service, pas quand il est une activité?

Non, cela fonctionne dans le sens inverse aussi, mais en général seulement si l'activité est le démarrage du service et se liant à elle. Plus important encore, AIDL est seulement pour la communication inter-processus.

  

J'aimerais quelques directions ou   des suggestions sur la façon de résoudre mon   problème.

Vous avez pas vraiment fourni suffisamment d'informations sur la nature de la communication pour vous donner une réponse complète. Qu'est-ce, exactement, est le service tente de dire l'activité? L'activité est également d'essayer de communiquer avec le service?

Le modèle recommandé pour la communication en cours d'une activité à un service est d'utiliser le modèle de liaison locale. Vous trouverez un exemple dans vos échantillons SDK, et vous pouvez en trouver un ici ainsi.

Le service a alors des options pour communiquer au client: via un rappel (par exemple, le Handler dans la réponse fournie par M. Smiljanić) ou via Intents de diffusion. Dans le cas du rappel, l'activité aurait besoin de se lier au service afin d'avoir accès à une API pour fournir l'objet de rappel. Le service détiendrait alors sur cet objet et appeler des méthodes sur elle lors d'événements clés.

Si votre service fait son travail principal sur un fil d'arrière-plan, vous devez vous assurer que vos opérations de l'interface utilisateur s'effectuées sur le thread d'interface utilisateur. Le Handler est une approche à cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top