Quand utiliser un thread / service dans Android?
Quand un thread ou un service être utilisé?
Devraient-ils être utilisés pour l'authentification? Par exemple, dans mon application j'ai été d'examiner à l'aide d'un fil ou d'un service (je suis de l'authentification via Active Directory.)
Avez-vous des exemples de chacun d'eux devrait être utilisé?
Vous devez vous connecter pour publier un commentaire.
Un thread doit être utilisé dans un long processus en cours d'exécution qui pourraient bloquer l'INTERFACE utilisateur de mise à jour. Si c'est à plus d'une seconde ou deux, vous pourriez le mettre dans un thread d'arrière-plan et de notifier à l'utilisateur une boîte de dialogue ou spinner ou quelque chose. Si vous verrouillez le thread de l'INTERFACE utilisateur depuis plus de 5 secondes, l'utilisateur est invité à une "tuer ou d'attente" de l'option par le système d'exploitation.
Un service n'est pas exécuté sur le thread séparé, de sorte qu'il va bloquer l'INTERFACE utilisateur, mais vous pouvez en générer un nouveau thread dans un service. Un service est utilisé plus pour quelque chose qui devrait arriver sur un intervalle ou de continuer à courir/vérification pour quelque chose quand il n'y a pas d'INTERFACE utilisateur indiqué.
A service does not run on separate thread, so it will block the UI,
Hmm? Le Service ne dispose pas d'INTERFACE utilisateur. Qui est-ce que ça va bloquer?Mise à jour: Il semble que l'Android documentation comprend un correspondant de précisions, consultez la http://developer.android.com/reference/android/app/Service.html#WhatIsAService.
Réponse originale à cette question:
Dans Android, un
Service
ne fournit pas une exécution simultanée ("exécuter en arrière-plan"). Il est en fait plus un simple objet Java qui simplement est instancié (et réussi) via le système Android au lieu de votre demande vianew
.La propriété la plus importante d'un service est donc pas sur de reporter la charge de travail; cela peut être réalisé avec de simples fils.
Ce qui rend un objet de service spécial, c'est qu'elle est enregistrée avec le système Android comme un service. Ce qui nous est le système de savoir que cet objet fournit une sorte de service et devrait être gardé en vie aussi longtemps que possible, ou jusqu'à ce qu'il soit arrêté. Normal les threads de l'application n'ont pas cette signification particulière pour le système Android et sera terminé beaucoup plus généreusement à la discrétion du système.
Donc, si vous avez besoin de certaines activités d'arrière-plan pour aller plus loin, que pendant que votre application/
Activity
est active, un thread peut faire ce que vous avez besoin.Si vous avez besoin d'un composant qui
garde activene sera pas purgé même lorsque, après un certain temps, le système Android décide de retirer votreActivities
de mémoire, vous devriez aller pour le service, ou même un premier plan "service", qui est considéré comme encore plus important par le système et encore moins susceptible d'être résilié pour récupérer des ressources.Bien sûr, si vous le souhaitez, un
Service
objet peut également être faite pour contenir un ou plusieursThread
instances qui pourrait vivre aussi longtemps que laService
objet lui-même.Edit:
Oh, plus: Un service est, bien sûr, la voie à suivre si vous souhaitez fournir certains services(s) pour d'autres applications, ce qui peut "lier" à un service uniquement.
Il suffit de regarder ce joli post Android Fil Des Constructions(Partie 4): Les Comparaisons
.
ou La différence entre le Service, Async Task & Thread?.
Utiliser le service si vous avez besoin de quelque chose qui est utilisé par d'autres applications ou survit à vos activités d'application. Le bon exemple de service de transfert de fichiers qui peut prendre beaucoup de temps et vous ne voulez pas forcer l'utilisateur à l'aide de votre application pendant ce temps. L'utilisation de la thread (généralement par l'intermédiaire d'AsyncTask ou similaire) dans les autres cas.
À des fins d'authentification
AsyncTask
semble être un bon choix.Je crois que la principale différence est sur le système Android attitude. Le Service fait partie d'android infrastructure, de sorte que android reconnaît service comme une partie de travail de l'application et de l'estime de tuer service comme une dernière option. En outre, vous pouvez régler le service de la priorité dans l'ordre de le faire aussi important que le premier plan de l'activité. Comme pour les threads, android ne reconnaît pas un thread comme élément important qui doit être gardé. Donc d'habitude fils a beaucoup plus de chances d'être tué.
Par exemple, Si vous avez une activité pour lancer un thread de travail et ensuite aller de l'arrière-plan, comme android ne reconnaissent pas thread comme une partie de travail, on peut penser que l'application ne rien faire, parce que l'absence d'activité ou de service en cours d'exécution et de tuer l'ensemble de l'application, y compris le fil de travail.
Comme par Android Developer Guide (http://developer.android.com/guide/components/services.html#Basics) :
Un service est simplement un composant qui peut s'exécuter en arrière-plan, même lorsque l'utilisateur n'est pas d'interagir avec votre application. Ainsi, vous devez créer un service uniquement si c'est ce que vous avez besoin.
Si vous avez besoin d'effectuer des travaux à l'extérieur de votre thread principal, mais uniquement lorsque l'utilisateur interagit avec votre application, alors vous devriez probablement au lieu de créer un nouveau fil de discussion, 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(), commencer à courir dans onStart(), puis l'arrêter dans onStop(). Pensez aussi à utiliser des AsyncTask ou HandlerThread, au lieu de la traditionnelle classe Thread. Voir les Processus et threads de document pour plus d'informations à propos des threads.
Rappelez-vous que si vous faites usage d'un service, il s'exécute toujours dans votre application thread principal par défaut, donc vous devez toujours créer un nouveau fil de discussion au sein du service si elle effectue intensifs ou d'opérations de blocage.