wake-up-neo.net

Service vs Thread in Android

Ich suche, welcher Dienst in Android-Anwendungen verwendet werden soll. 

Docs sagt

Ein Dienst ist eine Anwendungskomponente, die lange Vorgänge im Hintergrund ausführen kann und keine Benutzeroberfläche bietet.

Ich habe diesen Thread gelesen Application Threads vs. Service Threads dass die gleichen Dienste für den laufenden Betrieb im Hintergrund stehen.

Dies kann aber auch mit Thread erfolgen. Jeder Unterschied zwischen ihnen und wo Sie sie verwenden sollten 

24
N Sharma

Ein Service soll Ihre Aufgabe unabhängig von der Activity ausführen. Sie können damit jede Aufgabe im Hintergrund ausführen. Dies wird auf dem Haupt-UI-Thread ausgeführt. Wenn Sie also eine Netzwerk- oder Hochlastoperation ausführen möchten, müssen Sie dort die Variable Thread verwenden.

Beispiel: Angenommen, Sie möchten Ihre Sofortnachrichten täglich im Hintergrund sichern, dann würden Sie hier die Variable Service verwenden.

Threads ist für die Ausführung Ihrer Aufgabe in einem eigenen Thread anstelle des Haupt-UI-Threads. Sie würden es verwenden, wenn Sie einige umfangreiche Netzwerkoperationen durchführen möchten, z. B. das ständige Senden von Bytes an den Server, und dies ist den Android-Komponenten zugeordnet. Wenn Ihre Komponente zerstört, wer damit angefangen hat, sollten Sie sie ebenfalls stoppen. 

Beispiel: Sie verwenden die Variable Thread für einen bestimmten Zweck in der Aktivität. Es ist empfehlenswert, sie anzuhalten, wenn Ihre Aktivität zerstört wird. 

19
N Sharma

UPDATE basierend auf der neuesten Dokumentation:

Android hat in seine Dokumentation aufgenommen, wann Sie Service vs Thread verwenden sollten. Hier ist, was es sagt:

Wenn Sie Arbeit außerhalb Ihres Hauptthreads ausführen müssen, jedoch nur während Wenn der Benutzer mit Ihrer Anwendung interagiert, sollten Sie Erstellen Sie wahrscheinlich stattdessen einen neuen Thread und keinen Dienst. Zum Beispiel, Wenn Sie Musik abspielen möchten, aber nur, wenn Ihre Aktivität .__ ist. Wenn Sie ausgeführt werden, können Sie in onCreate () einen Thread erstellen. Starten Sie ihn in onStart () und dann in onStop () stoppen. Erwägen Sie auch die Verwendung von AsyncTask oder HandlerThread anstelle der traditionellen Thread-Klasse. Siehe die Prozesse und Threading-Dokument für weitere Informationen zu Threads.

Denken Sie daran, dass ein Dienst trotzdem in Ihrem .__ ausgeführt wird, wenn Sie einen Dienst verwenden. Der Haupt-Thread der Anwendung ist standardmäßig vorhanden. Sie sollten also immer noch ein neues .__ erstellen. Thread innerhalb des Dienstes, wenn er intensiv oder blockierend ist Operationen.

Ein weiterer bemerkenswerter Unterschied zwischen diesen beiden Ansätzen besteht darin, dass Thread in den Ruhezustand versetzt wird, wenn sich Ihr Gerät im Ruhezustand befindet. Währenddessen kann der Service auch dann ausgeführt werden, wenn das Gerät in den Ruhezustand wechselt. Nehmen wir zum Beispiel Musik mit beiden Ansätzen.

Thread-Ansatz: Die Musik wird nur abgespielt, wenn Ihre App aktiv ist oder die Bildschirmanzeige aktiviert ist.

Service Approach: Die Musik kann auch dann abgespielt werden, wenn Sie Ihre App minimieren oder den Bildschirm ausschalten.

Hinweis: Ab API Level 23 sollten Sie Ihre App mit Doze testen.

Android Dokumentation - Dienste

23
user1506104

Dies ist das Prinzip, dem ich weitgehend folge 

Verwenden Sie einen Thread, wenn

  • die App muss sichtbar sein, wenn die Operation ausgeführt wird.
  • hintergrundbetrieb ist relativ kurz (weniger als eine oder zwei Minuten)
  • die Aktivität/Bildschirm/App ist in hohem Maße mit der Hintergrundoperation gekoppelt. Der Benutzer "wartet" normalerweise, bis diese Operation abgeschlossen ist, bevor er irgendetwas anderes in der App ausführt. Die Verwendung eines Threads in diesen Fällen führt zu sauberer, lesbarer und wartbarer Code. Das heißt, es ist möglich, einen Dienst (oder IntentService) zu verwenden. 

Verwenden Sie einen Dienst, wenn

  • die App ist möglicherweise nicht sichtbar, wenn der Vorgang ausgeführt wird (Funktionen wie der Vordergrunddienst können dazu beitragen, dass Vorgänge unterbrochen werden).
  • Der Benutzer muss nicht warten, bis der Vorgang abgeschlossen ist, um andere Aufgaben in der App auszuführen. 
  • app ist sichtbar und die Bedienung ist unabhängig vom App/Bildschirm-Kontext.
4
Vinay Wadhwa

Referenz von https://developer.Android.com/guide/components/services.html

Ein Dienst ist einfach eine Komponente, die im Hintergrund ausgeführt werden kann, auch wenn der Benutzer nicht mit Ihrer Anwendung interagiert. Daher sollten Sie einen Dienst nur dann erstellen, wenn Sie das benötigen.

Wenn Sie die Arbeit außerhalb Ihres Haupt-Threads durchführen müssen, aber nur, wenn der Benutzer mit Ihrer Anwendung interagiert, sollten Sie stattdessen einen neuen Thread und keinen Dienst erstellen.

Wenn Sie beispielsweise Musik abspielen möchten, aber nur während der Ausführung Ihrer Aktivität, können Sie einen Thread in onCreate () erstellen, ihn in onStart () ausführen und dann in onStop () stoppen.

Wenn Sie einen Dienst verwenden, wird dieser standardmäßig weiterhin im Hauptthread Ihrer Anwendung ausgeführt. Sie sollten also weiterhin einen neuen Thread innerhalb des Dienstes erstellen, wenn er intensive oder blockierende Vorgänge durchführt.

2
Elsa Lin

Wahrscheinlich haben Sie die Dokumentationsbeschreibung bereits gelesen. Ich werde sie nicht wiederholen. Stattdessen versuche ich, mit meinen eigenen Worten zu antworten. Ich hoffe, sie werden Ihnen helfen.

Service ist wie eine Aktivität, hat aber keine Schnittstelle. Wenn Sie zum Beispiel das Wetter abrufen möchten, erstellen Sie wahrscheinlich keine leeren Aktivitäten. Dafür verwenden Sie einen Dienst.

Ein Thread ist ein Thread, den Sie wahrscheinlich schon von anderen Teilen kennen. Sie müssen wissen, dass Sie die Benutzeroberfläche nicht von einem Thread aus aktualisieren können. Sie müssen dafür einen Handler verwenden, aber lesen Sie weiter.

0
Attif