Was ist der Unterschied zwischen Service, Async Task & Thread? Wenn ich mich nicht irre, werden alle verwendet, um einige Dinge im Hintergrund zu tun. Wie kann man also entscheiden, welche wann verwendet werden soll?
Was ist der Unterschied zwischen Service, Async Task & Thread? Wenn ich mich nicht irre, werden alle verwendet, um einige Dinge im Hintergrund zu tun. Wie kann man also entscheiden, welche wann verwendet werden soll?
Antworten:
Wahrscheinlich haben Sie die Beschreibung der Dokumentation bereits gelesen. Ich werde sie nicht wiederholen. Stattdessen werde ich versuchen, mit meinen eigenen Worten zu antworten. Ich hoffe, sie helfen Ihnen.
Service ist wie eine Aktivität, hat aber keine Benutzeroberfläche. Wenn Sie beispielsweise das Wetter abrufen möchten, erstellen Sie wahrscheinlich keine leere Aktivität dafür. Dazu verwenden Sie einen Dienst.
Ein Thread ist ein Thread, wahrscheinlich kennen Sie ihn bereits aus einem anderen Teil. Sie müssen wissen, dass Sie die Benutzeroberfläche nicht über einen Thread aktualisieren können. Sie müssen hierfür einen Handler verwenden, aber lesen Sie weiter.
Eine AsyncTask ist ein intelligenter Thread, dessen Verwendung empfohlen wird. Intelligent, da es bei 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.
Dies ist die einfachste Antwort auf Ihre Frage
Faden
ist eine Ausführungseinheit, die "parallel" zum Haupt-Thread ausgeführt wird wird. ist ein wichtiger Punkt. Sie können hier keine UI-Komponente von einem beliebigen Thread außer dem Haupt-Thread aktualisieren.
AsyncTask
ist ein spezieller Thread, der Ihnen Hilfsmethoden zum Aktualisieren der Benutzeroberfläche bietet Hilfsmethoden zum Aktualisieren der Benutzeroberfläche bietet, sodass Sie die Benutzeroberfläche grundsätzlich aktualisieren können, selbst wenn AsyncTask auf einem Hintergrundthread ausgeführt wird. Die Verarbeitung der Interprozesskommunikation muss nicht explizit erfolgen.
Bedienung
Lösen Sie das oben genannte Problem, da es getrennt von der Aktivität lebt, die es aufruft, sodass es auch dann weiter ausgeführt werden kann, wenn die Aktivität zerstört wird. Es wird im Hauptthread ausgeführt (Vorsicht vor ANR). Verwenden Sie einen Hintergrunddienst (erweitern Sie IntentService, um den Arbeitsthread automatisch zu erstellen für dich) . Service ist wie eine Aktivität ohne Benutzeroberfläche , ist gut für lange Aufgaben
Ich wünschte, jemand hätte es mir vor ein paar Tagen gesagt:
Mein Anwendungsfall ist folgender: 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, geht die Aktivität in den Hintergrund und ein neuer Dienst wird gestartet. Dieser Dienst liest dann die Ergebnisse aus dem Thread und zeigt bei Bedarf Informationen im Benachrichtigungsbereich 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.
Aus Entwicklersicht:
Thread : Wird verwendet, um den Satz auf Codes parallel zum Hauptthread auszuführen. Sie können jedoch nicht mit der Benutzeroberfläche innerhalb des Threads umgehen. Dafür müssen Sie verwenden Handler
. Hadler funktioniert wie ein Thread, kann aber auch mit der Benutzeroberfläche umgehen.
ASyncTask : Wird zur Bearbeitung von Aufgaben verwendet, die Sie nicht für die Arbeit am Hauptthread ausführen können. Beispielsweise ist eine HTTP-Anforderung eine sehr schwere Arbeit, die im Hauptthread nicht bearbeitet werden kann. Sie behandeln die HTTP-Anforderung daher im ASyncTask
Hintergrund. Sie funktioniert parallel zu Ihrem Hauptthread. Im Hintergrund werden nur wenige Rückrufmethoden aufgerufen Veranstaltungen.
Service : Ist ein Hintergrundprozess. Es wird verwendet, wenn Sie eine Verarbeitung durchführen müssen, der keine Benutzeroberfläche zugeordnet ist.
Service
wird nicht unbedingt im Hintergrund ausgeführt, es sei denn, Sie verwenden IntentService
. Wenn Sie einen Service
Standard vom UiThread aus gestartet haben, wird dieser auf dem UiThread ausgeführt.
Service
es standardmäßig nicht in einem anderen Prozess ausgeführt wird, sondern im App-Prozess mit den anderen Komponenten. Besser gesagt, Service
das läuft im Hintergrund des Threads, in dem es lebt.