Wenn Sie Quellcode von Asyntask und Handler sehen, sehen Sie ihren Code rein in Java. (Natürlich gibt es einige Ausnahmen, aber das ist kein wichtiger Punkt).
Warum heißt das? Es bedeutet keine Magie in Asyntask oder Handler. Sie erleichtern Ihre Arbeit als Entwickler.
Zum Beispiel:
Thread t = Thread.currentThread();
int id = t.getId();
Und warum sollten Sie neue verwenden Thread: Wenn Programa ruft methodA(), methodA() in einem anderen Thread mit ProgramA.You leicht testen, indem Sie laufen würde? Sie können dafür googlen. Viele viele Gründe.
Also, was ist der Unterschied?
AsyncTask und Handler sind in Java geschrieben (verwenden Sie intern einen Thread), also können Sie alles, was Sie mit Handler oder AsyncTask tun können, auch mit einem Thread erreichen.
Welcher Handler und AsyncTask helfen Ihnen wirklich?
Der offensichtlichste Grund ist die Kommunikation zwischen dem Anrufer-Thread und dem Worker-Thread. (Anrufer-Thread: Ein Thread, der den Worker-Thread aufruft, um eine Aufgabe auszuführen. Ein Anrufer-Thread ist möglicherweise nicht immer der UI-Thread). Und natürlich können Sie zwischen zwei Threads auf andere Weise kommunizieren, aber es gibt viele Nachteile, zB: Main Thread ist nicht Thread-sicher (in den meisten Fällen), mit anderen Worten, GEFÄHRLICH.
Deshalb sollten Sie Handler und AsyncTask verwenden. Sie erledigen die meiste Arbeit für Sie, Sie müssen nur wissen, welche Methoden Sie außer Kraft setzen können.
Differenzhandler und AsyncTask: Verwenden Sie AsyncTask, wenn der Anruferthread ein UI-Thread ist. Dies ist, was Android-Dokument sagt:
AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers
ich auf zwei Punkte hervorheben möchte:
1) Einfache Verwendung der UI-Thread (so verwenden, wenn Anrufer Thread UI-Thread ist).
2) Keine Notwendigkeit, Handler zu manipulieren. (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, warum es einfacher ist. Sie müssen eine Methode hinter jeder Art kennen und nutzen es, Sie werden vollständig verstehen, warum ..
@: Wenn Sie Android Dokument lesen, werden Sie sehen:
Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue
Sie zunächst seltsam erscheinen mag .Nur verstehen, dass jeder Thread jede Nachrichtenwarteschlange hat. (wie eine To-Do-Liste), und der Thread nimmt jede Nachricht und tut es, bis die Nachrichtenwarteschlange leer ist. (Ah, vielleicht, als würdest du deine Arbeit beenden und ins Bett gehen). Wenn Handler kommuniziert, gibt es nur eine Nachricht an den Anrufer-Thread und es wartet auf die Verarbeitung. (Sophisticate? aber Sie wissen nur, dass Handler in sicherer Weise mit Anrufer-Thread kommunizieren kann)
Ok ist die Idee, Aufgaben zu delegieren, die mehr Zeit für andere Threads benötigen, so dass der Haupt-Thread nicht auf Informationen wartet von anderswo, während es etwas anderes laufen könnte. Während Sie alles von OnCreate ausführen können, ist es wahrscheinlich nicht die effizienteste Art, es zu tun. – Rarw
Nun, es hängt davon ab, wie Sie "effizient" definieren. Die Best Practice schlägt im Allgemeinen vor, dass Sie, wenn Sie etwas haben, das eine "spürbare" Zeit in Anspruch nimmt, diese aus dem UI-Thread herausziehen und daher nicht mehr onCreate. Es hängt auch etwas davon ab, ob Sie die Ergebnisse benötigen oder nicht, um die Benutzeroberfläche usw. anzuzeigen. Aber ja, Ihr Kommentar ist im Allgemeinen richtig, würde ich sagen. – mfrankli