Je passais par Bound Service in Android Website développeur. Je pensais que je comprenais assez le service mais je viens de trouver un autre moyen de connecter le service à l'aide d'un Messenger
classe spécialement pour le service local. Là je me suis trompé. Peut-être que j'ai mal compris le concept.
Voici ma compréhension de Android Service
. Vous créez un service lorsque
La confusion est le premier élément de la liste, la définition de l'arrière-plan. L'arrière-plan n'est-il pas un fil conducteur ou un processus? Je n'ai jamais pensé qu'il puisse fonctionner sur le thread principal.
Voici la prudence du service dans les pages de développement sur.
Attention : Un service s'exécute dans le thread principal de son processus d'hébergement - le service ne crée pas son propre thread et ne s'exécute pas dans un processus distinct (sauf si vous spécifiez le contraire). Cela signifie que, si votre service doit effectuer des travaux gourmands en processeur ou des opérations de blocage (telles que la lecture MP3 ou la mise en réseau), vous devez créer un nouveau thread dans le service pour effectuer ce travail. En utilisant un thread séparé, vous réduirez le risque d'erreurs d'application ne répondant pas (ANR) et le thread principal de l'application peut rester dédié à l'interaction de l'utilisateur avec vos activités.
Des questions
Le thread principal de l'application n'est pas toujours le thread de l'interface utilisateur. Par exemple, lorsque Activity
est arrêté, la onStop()
est invoquée, d'où le thread d'interface utilisateur est retiré de cette Activity
et déplacé vers une autre activité dans la même ou une autre application. Cependant, cela ne signifie pas que l'application n'est plus active, elle peut continuer à fonctionner en arrière-plan jusqu'à ce qu'elle soit fermée par le système d'exploitation ou par l'utilisateur. Alors, qui le fait fonctionner en arrière-plan? Il s'agit du thread principal et non du thread d'interface utilisateur.
Quels sont les services
Dans Android, un service est un composant d'application qui peut effectuer des opérations de longue durée en arrière-plan sur le thread d'interface utilisateur. En arrière-plan, cela signifie qu'il n'a pas d'interface utilisateur. Un service s'exécute par défaut sur le thread principal du processus du composant appelant (et peut donc dégrader la réactivité et provoquer des ANR), vous devez donc créer un nouveau thread pour effectuer des opérations de longue durée. Un service peut également être configuré pour s'exécuter dans un processus complètement différent.
Contrairement aux composants d'activité, les services n'ont pas d'interface graphique. Les récepteurs de diffusion sont également destinés à recevoir des messages de diffusion (diffusion, multidiffusion, unicast) et à effectuer de courtes tâches, tandis que les services sont destinés à effectuer un traitement long comme la musique en streaming, les transactions réseau, les E/S de fichiers, interagir avec les bases de données, etc. Lors du démarrage d'un service par un composant d'application comme une activité, il s'exécute en arrière-plan et continue de fonctionner même si l'utilisateur passe à une autre application ou si le composant de départ est lui-même détruit
Pourquoi utiliser le service
Les services ont une priorité plus élevée que les autres processus d'arrière-plan et il est donc moins probable que Android y mettra fin. Bien qu'il puisse être configuré pour redémarrer une fois qu'il y aura à nouveau suffisamment de ressources disponibles. Vous devriez parcourir les différents processus et leur niveau de priorité/important dans la documentation sur les processus et les threads. Leur attribuer la même priorité que les activités de premier plan est définitivement possible, auquel cas il faudra avoir une notification visible active (généralement utilisée pour les services jouant de la musique).
Utilisez IntentService
si vous ne voulez pas vous débrouiller seul avec la gestion des threads. Sinon, utilisez AsyncTasks
.
Veuillez lire cet excellent article pour comprendre plus en détail et aussi lire cette réponse .