Kann mir jemand sagen, ob es einen Unterschied zwischen der Verwendung von runOnUiThread () und Looper.getMainLooper (). Post () gibt, um eine Aufgabe im UI-Thread in Android auszuführen?
Das einzige, was ich feststellen kann, ist, dass Looper.getMainLooper (). Post () praktischer ist, wenn runOnUiThread eine nicht statische Aktivitätsmethode ist, wenn Sie etwas in einer Klasse codieren müssen, die die Aktivität nicht sehen kann (z eine Schnittstelle).
Ich bin nicht auf der Suche nach einer Diskussion darüber, ob etwas im UI-Thread ausgeführt werden soll. Ich verstehe, dass einige Dinge nicht können und viele Dinge nicht, jedoch MÜSSEN einige Dinge (wie das Starten einer AsyncTask) ausgeführt werden der UI-Thread.
Danke,
R.
android
android-ui
Reich
quelle
quelle
runOnUiThread
überprüft wird, ob es sich bereits um den UI-Thread handelt, und Ihre Aufgabe direkt ausgeführt wird, anstatt sie alsMessage
Antworten:
Folgendes verhält sich beim Aufrufen aus Hintergrundthreads gleich:
mit
Looper.getMainLooper()
mit
Activity#runOnUiThread()
Der einzige Unterschied besteht darin, wann Sie dies vom UI-Thread aus tun
prüft, ob der aktuelle Thread bereits der UI-Thread ist, und führt ihn dann direkt aus. Wenn Sie es als Nachricht veröffentlichen, wird die Ausführung verzögert, bis Sie von der aktuellen UI-Thread-Methode zurückkehren.
Es gibt auch eine dritte Möglichkeit, eine
Runnable
auf dem UI-Thread auszuführenView#post(Runnable)
: Diese sendet immer die Nachricht, auch wenn sie vom UI-Thread aufgerufen wird. Dies ist nützlich, da dadurch sichergestellt wird, dassView
der Code ordnungsgemäß erstellt wurde und ein Layout aufweist, bevor der Code ausgeführt wird.quelle