web-dev-qa-db-fra.com

Service vs Fil dans Android

Je cherche quel service devrait être utilisé dans les applications Android. 

Docs dit

Un service est un composant d'application qui peut effectuer des opérations de longue durée en arrière-plan et ne fournit pas d'interface utilisateur.

J'ai lu ce fil Les threads d'application et les threads de service qui disent que les mêmes services sont destinés à l'exécution d'une opération en arrière-plan.

Mais ici, cela peut être fait en utilisant Thread également. Toute différence entre eux et où vous devriez les utiliser 

24
N Sharma

Un service est conçu pour exécuter votre tâche indépendamment de la Activity. Il vous permet d'exécuter n'importe quelle tâche en arrière-plan. Cela s’exécute sur le thread principal d’interface utilisateur. Ainsi, lorsque vous souhaitez effectuer une opération sur le réseau ou à forte charge, vous devez utiliser la variable Thread.

Exemple: Supposons que vous souhaitiez sauvegarder quotidiennement vos messages instantanés en arrière-plan, puis utilisez la variable Service.

Threads est pour exécuter votre tâche dans son propre thread au lieu du thread principal de l'interface utilisateur. Vous pouvez l'utiliser lorsque vous souhaitez effectuer des opérations réseau importantes, telles que l'envoi continu d'octets au serveur, associé aux composants Android. Lorsque votre composant détruit qui a lancé cette opération, vous devriez également l’arrêter. 

Exemple: vous utilisez la Thread dans l'activité à certaines fins, il est recommandé de l'arrêter lorsque votre activité est détruite. 

19
N Sharma

UPDATE basé sur la dernière documentation:

Android a inclus dans sa documentation le moment où vous devriez utiliser Service vs Thread. Voici ce qu'il dit:

Si vous devez effectuer un travail en dehors de votre thread principal, mais uniquement pendant le l'utilisateur interagit avec votre application, alors vous devriez probablement au lieu de créer un nouveau thread et non un service. Par exemple, si vous voulez jouer de la musique, mais seulement pendant que votre activité est En cours d’exécution, vous pouvez créer un thread dans onCreate (), commencez à l’exécuter dans onStart (), puis arrêtez-le dans onStop (). Pensez également à utiliser AsyncTask ou HandlerThread, au lieu de la classe Thread traditionnelle. Voir le Document sur les processus et les threads pour plus d'informations sur les threads.

N'oubliez pas que si vous utilisez un service, il est toujours exécuté dans votre fichier le thread principal de l'application par défaut, vous devriez donc toujours créer un nouveau fichier thread au sein du service s’il effectue un travail intensif ou bloquant opérations.

Une autre différence notable entre ces deux approches est que Thread dormira si votre appareil est en veille. En revanche, le service peut fonctionner même si l'appareil se met en veille. Prenons par exemple jouer de la musique en utilisant les deux approches.

Thread Approach: la musique ne sera lue que si votre application est active ou si l'écran est allumé.

Approche de service: la musique peut toujours jouer même si vous avez réduit votre application ou si l'écran est éteint.

Remarque: à partir du niveau 23 de l'API, vous devriez Testez votre application avec Doze .

Documentation Android - Services

23
user1506104

C'est le principe que je suis en grande partie suivre 

Utilisez un fil quand

  • l'application doit être visible lorsque l'opération est effectuée.
  • l'opération en arrière-plan est relativement courte (moins d'une minute ou deux)
  • l'activité/l'écran/l'application étant fortement associés à l'opération en arrière-plan, l'utilisateur «attend» généralement que l'opération soit terminée avant de faire quoi que ce soit d'autre dans l'application . code. Cela étant dit, il est possible d'utiliser un service (ou IntentService). 

Utiliser un service quand

  • l'application peut être invisible lorsque l'opération se produit (des fonctionnalités telles que le service de premier plan pourraient aider à interrompre des opérations)
  • L'utilisateur n'est pas obligé d'attendre la fin de l'opération pour effectuer d'autres opérations dans l'application. 
  • app est visible et l'opération est indépendante du contexte app/screen.
4
Vinay Wadhwa

Référence de https://developer.Android.com/guide/components/services.html

Un service est simplement un composant qui peut s'exécuter en arrière-plan, même lorsque l'utilisateur n'interagit pas avec votre application. Ainsi, vous ne devez créer un service que si c'est ce dont vous avez besoin.

Si vous devez travailler en dehors de votre thread principal, mais uniquement pendant que l'utilisateur interagit avec votre application, vous devriez probablement plutôt créer un nouveau thread et non un service.

Par exemple, si vous souhaitez écouter de la musique, mais uniquement pendant que votre activité est en cours, vous pouvez créer un fil dans onCreate (), le lancer dans onStart (), puis l'arrêter dans onStop ().

N'oubliez pas que si vous utilisez un service, celui-ci est toujours exécuté par défaut dans le thread principal de votre application. Par conséquent, vous devez toujours créer un nouveau thread au sein du service s'il effectue des opérations intensives ou de blocage.

2
Elsa Lin

Vous avez probablement déjà lu la description de la documentation à leur sujet, je ne les répéterai pas, je tenterai plutôt de répondre avec mes propres mots, en espérant qu'ils vous aideront.

Service est comme une activité mais n'a pas d'interface. Si vous voulez par exemple consulter la météo, vous ne créerez pas d'activité vide pour cette activité, vous utiliserez pour cela un service.

Un Thread est un thread, vous le connaissez probablement déjà dans une autre partie. Vous devez savoir que vous ne pouvez pas mettre à jour l'interface utilisateur à partir d'un thread. Vous devez utiliser un gestionnaire pour cela, mais lisez plus loin.

0
Attif