/ / Comment une activité doit-elle communiquer avec un service éventuellement de longue durée? - android, android-activité, android-service

Comment une activité devrait-elle communiquer avec un service de longue date? - android, android-activity, android-service

J'ai un service de premier plan et une activité qui communique avec lui. Le service est démarré et arrêté par l'activité, mais peut également s'arrêter de lui-même.

Le service doit rester en cours d'exécution jusqu'à ce qu'il soit explicitement arrêté, même si l'utilisateur s'éloigne du service. À bien des égards, ce scénario est similaire à un lecteur de musique.

Si le service n'est pas réellement utilisé, il serait bon qu'il puisse encore rester jusqu'à ce que le système ait besoin de mémoire, comme le fait une activité interrompue.

Comment l'activité devrait-elle communiquer avec le service? J'ai considéré:

  • Liez le service et obtenez une référence au service via le classeur. Cela arrêterait le service si l'activité est détruite.
  • Démarrez le service. Demandez au service de stocker une référence dans un champ statique. Demandez à l'activité d'attendre le démarrage du service, puis utilisez la référence. Cela semble bizarre.
  • Démarrez le service, puis liez le service et obtenez une référence au service via le classeur. Cela fonctionne, mais provoque le redémarrage du service à chaque fois qu'il est tué, comme s'il était collant.
  • Démarrez le service, puis envoyez-lui des intentions (en utilisant startService). Cela semble inefficace, mais je ne l'ai pas mesuré, alors peut-être que ça va. Il ne permet pas au service de notifier l’activité des mises à jour.
  • Démarrez le service, liez le service. Assurez-vous que le service est toujours explicitement arrêté lorsque son travail est terminé. Cela signifie que le service ne «restera» pas en attente jusqu'à ce que le système ait besoin de mémoire. »De plus, il doit enregistrer ses données ailleurs que dans ses propres champs, car l'utilisateur peut reprendre l'activité immédiatement après l'arrêt du service.
  • Supprimez le service de l'équation en le fusionnant dans l'activité. Faites autre chose pour garder la connexion TCP ouverte.

Réponses:

0 pour la réponse № 1

Pour les messages qui passent, Android fournit Handler, Messenger. Vous voudrez peut-être jeter un œil au lien suivant et je pense qu'il satisfera vos besoins.

Exemple: communication entre l'activité et le service à l'aide de la messagerie