Faden
Ein Thread ist eine gleichzeitige Ausführungseinheit. Es hat einen eigenen Aufrufstapel. Es gibt zwei Methoden, um Threads in Anwendungen zu implementieren.
Eine davon ist die Bereitstellung einer neuen Klasse, die Thread erweitert und die run () -Methode überschreibt. Die andere besteht darin, einer neuen Thread-Instanz während ihrer Erstellung ein ausführbares Objekt bereitzustellen. Ein Thread kann durch Aufrufen seiner "start" -Methode ausgeführt werden. Sie können die "Priorität" eines Threads festlegen, indem Sie dessen Methode "setPriority (int)" aufrufen.
Ein Thread kann verwendet werden, wenn Sie keine Auswirkungen auf den UI-Teil haben. Sie rufen beispielsweise einen Webdienst auf oder laden einige Daten herunter, und nach dem Herunterladen zeigen Sie sie auf Ihrem Bildschirm an. Dann müssen Sie einen Handler mit einem Thread verwenden. Dadurch wird Ihre Anwendung kompliziert, um alle Antworten von Threads zu verarbeiten.
Mit einem Handler können Sie Nachrichten- und ausführbare Objekte senden und verarbeiten, die der MessageQueue eines Threads zugeordnet sind. Jeder Thread hat jede Nachrichtenwarteschlange. (Wie eine Aufgabenliste), und der Thread nimmt jede Nachricht und verarbeitet sie, bis die Nachrichtenwarteschlange leer ist. Wenn der Handler kommuniziert, gibt er nur eine Nachricht an den Aufruferthread und wartet auf die Verarbeitung.
Wenn Sie Java-Threads verwenden, müssen Sie die folgenden Anforderungen in Ihrem eigenen Code erfüllen:
Synchronisierung mit dem Hauptthread, wenn Sie Ergebnisse an die Benutzeroberfläche zurücksenden. Kein Standard für das Abbrechen des Threads. Kein Standard-Thread-Pooling. Kein Standard für die Behandlung von Konfigurationsänderungen in Android
AsyncTask
AsyncTask ermöglicht die ordnungsgemäße und einfache Verwendung des UI-Threads. Diese Klasse ermöglicht das Ausführen von Hintergrundoperationen und das Veröffentlichen von Ergebnissen auf dem UI-Thread, ohne dass Threads und / oder Handler bearbeitet werden müssen. Eine asynchrone Aufgabe wird durch eine Berechnung definiert, die auf einem Hintergrundthread ausgeführt wird und deren Ergebnis im UI-Thread veröffentlicht wird.
AsyncTask durchläuft die folgenden 4 Phasen:
onPreExecute ()
Wird im UI-Thread aufgerufen, bevor die Aufgabe ausgeführt wird
doInbackground (Params ..)
Wird im Hintergrundthread unmittelbar nach Abschluss der Ausführung von onPreExecute () aufgerufen.
onProgressUpdate (Fortschritt ..)
Wird im UI-Thread nach einem Aufruf von PublishProgress (Progress ...) aufgerufen.
onPostExecute (Ergebnis)
Wird im UI-Thread aufgerufen, nachdem die Hintergrundberechnung abgeschlossen ist.
Warum sollten Sie AsyncTask verwenden?
Einfach für einen UI-Thread zu verwenden. (Verwenden Sie es also, wenn der Aufruferthread ein UI-Thread ist.)
Handler müssen nicht manipuliert werden.