Wenn wir uns den Quellcode ansehen, werden wir sehen AsyncTask
y Handler
ist rein in Java geschrieben. (Es gibt allerdings einige Ausnahmen, aber das ist nicht wichtig)
Es gibt also keine Magie in AsyncTask
o Handler
. Diese Klassen machen uns als Entwickler das Leben leichter.
Zum Beispiel: Wenn Programm A die Methode A() aufruft, könnte die Methode A() in einem anderen Thread mit Programm A ausgeführt werden. Dies lässt sich mit dem folgenden Code leicht überprüfen:
Thread t = Thread.currentThread();
int id = t.getId();
Warum sollten wir für manche Aufgaben einen neuen Thread verwenden? Sie können danach googeln. Viele, viele Gründe, z.B.: schweres Heben, langwierige Arbeiten.
Was sind also die Unterschiede zwischen Thread
, AsyncTask
y Handler
?
AsyncTask
y Handler
sind in Java geschrieben (intern verwenden sie eine Thread
), also alles, was wir mit Handler
o AsyncTask
können wir mit einer Thread
zu.
Was kann Handler
y AsyncTask
wirklich helfen?
Der offensichtlichste Grund ist die Kommunikation zwischen dem Aufrufer-Thread und dem Worker-Thread. ( Anrufer-Thread : Ein Thread, der die Arbeitsthread um einige Aufgaben zu erfüllen. Der aufrufende Thread muss nicht unbedingt der UI-Thread sein). Natürlich können wir zwischen zwei Threads auch auf andere Weise kommunizieren, aber es gibt viele Nachteile (und Gefahren) aufgrund der Thread-Sicherheit.
Deshalb sollten wir die Handler
y AsyncTask
. Diese Klassen nehmen uns die meiste Arbeit ab, wir müssen nur wissen, welche Methoden wir außer Kraft setzen wollen.
Der Unterschied zwischen Handler
y AsyncTask
ist: Verwenden Sie AsyncTask
wenn Anrufer-Thread es un UI-Thread . So steht es im Android-Dokument:
AsyncTask ermöglicht die korrekte und einfache Verwendung des UI-Threads. Diese Klasse ermöglicht die Durchführung von Hintergrundoperationen und die Veröffentlichung von Ergebnissen auf dem UI Thread zu veröffentlichen, ohne Threads und/oder Handler manipulieren zu müssen
Ich möchte zwei Punkte hervorheben:
1) Einfache Verwendung des UI-Threads (also Verwendung, wenn der Aufrufer-Thread der UI-Thread ist).
2) Keine Manipulation der Handler erforderlich. (bedeutet: Sie können Handler anstelle von AsyncTask verwenden, aber AsyncTask ist eine einfachere Option).
Es gibt viele Dinge in diesem Beitrag, die ich noch nicht gesagt habe, zum Beispiel: was ist UI Thread, oder warum es einfacher ist. Sie müssen wissen, einige Methoden hinter jeder Klasse und verwenden Sie es, Sie werden vollständig den Grund, warum zu verstehen.
@: Wenn Sie das Android-Dokument lesen, werden Sie sehen:
Handler ermöglicht das Senden und Verarbeiten von Nachrichten und Runnable-Objekten die mit der MessageQueue eines Threads verbunden sind
Diese Beschreibung mag auf den ersten Blick seltsam erscheinen. Wir müssen nur verstehen, dass jeder Thread eine Nachrichtenwarteschlange hat (wie eine Aufgabenliste), und der Thread nimmt jede Nachricht und erledigt sie, bis die Nachrichtenwarteschlange leer ist (so wie wir unsere Arbeit beenden und ins Bett gehen). Also, wenn Handler
kommuniziert, gibt er nur eine Nachricht an den aufrufenden Thread weiter und wartet auf die Verarbeitung.
Kompliziert? Denken Sie einfach daran, dass Handler
sicher mit dem aufrufenden Thread kommunizieren kann.