web-dev-qa-db-ger.com

Unterschied zwischen Service, Async Task & Thread?

Was ist der Unterschied zwischen Service, Async Task & Thread? Wenn ich mich nicht irre, werden sie alle benutzt, um ein paar Sachen im Hintergrund zu machen. Also, wie soll man entscheiden, was wann verwendet werden soll?

145
SpunkerBaba

Wahrscheinlich haben Sie bereits die Dokumentationsbeschreibung darüber gelesen, ich werde sie nicht wiederholen, sondern ich werde versuchen, mit meinen eigenen Worten zu antworten, ich hoffe, sie werden Ihnen helfen.

  • Service ist wie eine Aktivität, hat aber keine Schnittstelle. Wenn Sie beispielsweise das Wetter abrufen möchten, werden Sie wahrscheinlich keine leere Aktivität dafür erstellen. Dazu werden Sie einen Dienst verwenden.

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

  • Eine AsyncTask ist ein intelligenter Thread, dessen Verwendung empfohlen wird. Intelligent, da es mit seinen Methoden helfen kann, und es gibt drei Methoden, die auf dem UI-Thread ausgeführt werden. Dies ist gut, um UI-Komponenten zu aktualisieren.

Ich verwende häufig Dienste und AsyncTasks. Thread weniger oder gar nicht, da ich mit AsyncTask fast alles machen kann.

182
Pentium10

Dies ist die einfachste Antwort auf Ihre Frage

Thread

ist eine Ausführungseinheit, die "parallel" zum Hauptthread ausgeführt wirdist ein wichtiger Punkt. Sie können keine UI-Komponente von einem beliebigen Thread hier außer dem Hauptthread aktualisieren.

AsyncTask

ist ein spezieller Thread, der Ihnen Hilfsmethoden zum Aktualisieren der Benutzeroberfläche bietet, sodass Sie im Grunde die Benutzeroberfläche aktualisieren können, auch wenn AsyncTask auf einem Hintergrundthread ausgeführt wird. Die Verarbeitung der Interprozesskommunikation muss nicht explizit erfolgen.

Service

lösen Sie das obige Problem, da es unabhängig von der aufgerufenen Aktivität ausgeführt wird, sodass es auch dann weiter ausgeführt werden kann, wenn die Aktivität zerstört wurde. Verwenden Sie einen Hintergrunddienst (IntentService erweitern) es erstellt den Worker-Thread automatisch für Sie). Service ist wie eine Aktivität ohne UI, ist gut für lange Aufgaben

22

Ich wünschte, jemand hätte mir vor ein paar Tagen Folgendes mitgeteilt:

  • Sie können globale Variablen - wie z. B. Threads - für Aktivitäten und Dienste freigeben.
  • Ihr Anwendung mit all seinen globalen Variablen wird nicht gelöscht, solange noch eine Aktivität oder ein Dienst vorhanden ist.
  • Wenn Sie eine Instanz eines Dienstes in Ihrer App haben und das Betriebssystem Ressourcen benötigt, werden zuerst Ihre Aktivitäten beendet. Solange jedoch der Dienst vorhanden ist, löscht das Betriebssystem Ihre Anwendung zusammen mit den globalen Variablen nicht.

Mein Anwendungsfall sieht folgendermaßen aus: Ich habe einen Thread im globalen Bereich, der mit einem Server verbunden ist, und eine Aktivität, die die Ergebnisse anzeigt. Wenn der Benutzer die Home-Taste drückt, wird die Aktivität in den Hintergrund verschoben und ein neuer Dienst gestartet. Dieser Dienst liest dann die Ergebnisse aus dem Thread und zeigt bei Bedarf Informationen im Infobereich an. Ich mache mir keine Sorgen, dass das Betriebssystem meine Aktivität zerstört, da ich weiß, dass der Thread zerstört wird, solange der Dienst ausgeführt wird.

15
Peter Jankuliak

Kurz gesagt, Service für time consuming tasks, AsyncTask für short-lived tasks, Thread ist ein standard Java construction für Threads.

9
Abbath

Aus Entwicklersicht:

Thread: Wird verwendet, um die Menge der Codes parallel zum Haupt-Thread auszuführen. Sie können jedoch nicht mit der Benutzeroberfläche innerhalb des Threads umgehen. Dafür müssen Sie Handler verwenden. Hadler arbeitet wie ein Thread, kann aber auch mit der Benutzeroberfläche umgehen.

ASyncTask: Wird für die Abwicklung der Aufgaben verwendet, die Sie für die Arbeit am Hauptthread nicht ausführen können. Beispielsweise ist eine HTTP-Anforderung sehr umfangreich und kann nicht im Hauptthread verarbeitet werden. Sie bearbeiten die HTTP-Anforderung daher im ASyncTask. Sie funktioniert im Hintergrund asynchron mit Ihrem Hauptthread. Es gibt nur wenige Rückrufmethoden die bei ihren entsprechenden Ereignissen aufgerufen werden.

Service: Ist ein Hintergrundprozess. Es wird verwendet, wenn Sie eine Verarbeitung ausführen müssen, der keine Benutzeroberfläche zugeordnet ist.

3
Rahul Raina

service ist wie eine Aktivität, die viel Zeit in Anspruch nimmt, aber mit Async können wir lange/Hintergrundoperationen durchführen und das Ergebnis auf dem UI-Thread anzeigen, ohne die Threads manipulieren zu müssen.

2
pankaj