Der UIThread ist der Hauptausführungsthread für Ihre Anwendung. Hier wird der größte Teil Ihres Anwendungscodes ausgeführt. Alle Ihre Anwendungskomponenten (Aktivitäten, Dienste, ContentProvider, BroadcastReceiver) werden in diesem Thread erstellt, und alle Systemaufrufe an diese Komponenten werden in diesem Thread ausgeführt.
Angenommen, Ihre Anwendung ist eine einzelne Aktivitätsklasse. Anschließend werden alle Lebenszyklusmethoden und der größte Teil Ihres Ereignisbehandlungscodes in diesem UIThread ausgeführt. Dies sind Methoden wie onCreate
, onPause
, onDestroy
, onClick
etc. Darüber hinaus ist das, wo alle Updates auf der Benutzeroberfläche vorgenommen werden. Alles, was dazu führt, dass die Benutzeroberfläche aktualisiert oder geändert wird, muss im UI-Thread geschehen.
Weitere Informationen zu den Prozessen und Threads Ihrer Anwendung finden Sie hier.
Wenn Sie explizit einen neuen Thread erzeugen, um im Hintergrund zu arbeiten, wird dieser Code nicht auf dem UIThread ausgeführt. Was passiert also, wenn dieser Hintergrund-Thread etwas tun muss, das die Benutzeroberfläche ändert? Dafür ist das da runOnUiThread
. Eigentlich solltest du einen Handler verwenden (siehe den Link unten für weitere Informationen dazu). Diese Hintergrund-Threads können Code ausführen, mit dem die Benutzeroberfläche geändert werden kann. Dazu fügen sie den UI-modifizierenden Code in ein Runnable-Objekt ein und übergeben ihn an die runOnUiThread-Methode.
Weitere Informationen zum Laichen von Worker-Threads und zum Aktualisieren der Benutzeroberfläche finden Sie hier
Ich persönlich verwende die runOnUiThread
Methode nur in meinen Instrumentierungstests. Da der Testcode nicht im UIThread ausgeführt wird, müssen Sie diese Methode verwenden, um Code auszuführen, der die Benutzeroberfläche ändert. Ich verwende es also, um Klick- und Schlüsselereignisse in meine Anwendung einzufügen. Ich kann dann den Status der Anwendung überprüfen, um sicherzustellen, dass die richtigen Dinge passiert sind.
Weitere Informationen zum Testen und Ausführen von Code auf dem UIThread finden Sie hier