Was ist der Unterschied zwischen Activity.runOnUiThread
und View.post
, könnte jemand, bitte, erklären?Android: Was ist der Unterschied zwischen Activity.runOnUiThread und View.post?
Antwort
Es gibt keinen wirklichen Unterschied, außer dass die View.post
hilfreich ist, wenn Sie keinen direkten Zugriff auf die Aktivität haben.
In beiden Fällen, wenn nicht auf UI-Thread, Handler#post(Runnable)
wird hinter den Kulissen aufgerufen werden.
Als CommonsWare im Kommentar erwähnt, gibt es einen Unterschied zwischen den beiden - wenn sie auf Ui Thread aufgerufen, Activity#runOnUiThread
wird direkt die run
Methode aufrufen, während View#post
die runnable
in der Warteschlange (zB rufen die Handler#post
)
Der wichtige Punkt IMO ist, dass beide das gleiche Ziel haben, und für alle, die es verwenden, sollte es keinen Unterschied geben (und die Implementierung kann sich in Zukunft ändern).
Ein Unterschied: 'runOnUiThread()' prüft den aktuellen Thread und führt den 'Runnable' sofort aus, wenn wir uns im Hauptanwendungs-Thread befinden. 'post()' setzt immer das 'Runnable' in die Warteschlange, egal welchen Thread es aufgerufen hat. – CommonsWare
@CommonsWare - True, ich werde meine Frage bearbeiten. – MByD
Danke, ich kann jetzt den Unterschied anhand Ihrer Erklärung und des Kommentars von @CommonsWare sehen. –
Beide sind akzeptabel für die meisten Situationen und zum größten Teil sind sie austauschbar, aber sie sind subtil anders. Der größte Unterschied ist natürlich, dass man von einer Activity
und die andere von einer View
erhältlich ist. Es gibt eine Menge Überschneidungen zwischen diesen, aber manchmal in einem Activity
haben Sie keinen Zugang zu einem View
, und manchmal in einem View
haben Sie keinen Zugang zu einem Activity
.
einer der Rand Fällen I mit View.post
angetroffen habe ich in an answer to another SO question on View.post
erwähnt: View.post
funktioniert nur von einem anderen Thread wenn die View
an ein Fenster angebracht ist. Dies ist selten ein Problem, kann aber gelegentlich dazu führen, dass die Runnable
nie ausgeführt wird, besonders wenn Sie View.post
in der onCreate
Methode Ihrer Activity
aufrufen. Eine Alternative ist, Handler.post
zu verwenden, die Activity.runOnUiThread
und View.post
sowieso unter den Abdeckungen verwenden.
(für Genauigkeit bearbeitet, hinzugefügt "von einem anderen Thread")
Es kann fehlschlagen, wenn auch in 'onCreate()' nicht verbunden? Hm, ich würde erwarten, dass es in diesem Fall zum 'Handler' von' ViewRoot' gepostet wird. – Jens
@Jens Ja, ich habe einen Blick auf die Quelle geworfen und 'View.post' sollte das' Runnable' zu einer Warteschlange hinzufügen, die später ausgeführt wird, wenn sie noch nicht angehängt ist. Ich habe nicht viel tiefer in die Quelle gegraben, aber die [Docs] (http://developer.android.com/reference/android/view/View.html#post%28java.lang.Runnable%29) sagen: "Diese Methode kann nur außerhalb des UI-Threads aufgerufen werden, wenn diese Ansicht an ein Fenster angefügt ist." Also ich denke, wenn es auf dem aktuellen Thread ist, dann ist das, was du gesagt hast, wahr, wenn es nicht ist, dann schluckt es wahrscheinlich nur das 'Runnable'. Ich hatte das sicher in meinem Code. – kabuko
@kabuko Danke deine Antwort zeigt es von einem anderen Punkt. Wie es ist, kann ich nicht akzeptieren mehr als 1 Antwort kann nicht Logik dahinter sehen, dass Adresse Meta-Forum –
Ein weiterer Unterschied zwischen Activity.runOnUiThread und view.post() ist, dass die in runnable view.post() aufgerufen wird, nachdem der Ansicht ist, an ein Fenster angehängt.
Wie meinst du das gezeigt? Wird sichtbar? Nicht auf eine unsichtbare Sicht überhaupt aufgerufen? –
Korrigierte die Mehrdeutigkeit Alex. – pareshgoel
Dies ist der wichtigste Unterschied IMHO. Viele Leute benutzen view.post(), um Sachen auszuführen, die ausgeführt werden müssen, NACHDEM die Ansicht angehängt wurde. – Sotti
- 1. Was ist der Unterschied zwischen Activity.runOnUiThread (runnable action) und Handler.post()?
- 2. Was ist der Unterschied zwischen @android: und Android:
- 3. Was ist der Unterschied zwischen Android: layout_width und android: width
- 4. Was ist der Unterschied zwischen `==` und `ist`?
- 5. Was ist der Unterschied zwischen hasFocus() und isFocused() in Android?
- 6. Android: Was ist der Unterschied zwischen View.inflate und getLayoutInflater().
- 7. Was ist der Unterschied zwischen Aktivität und Absicht in Android?
- 8. Was ist der Unterschied zwischen sendStickyBroadcast und sendBroadcast in Android
- 9. was ist der Unterschied zwischen windowActionBar und Android: windowActionBar
- 10. Was ist der Unterschied zwischen fontFamily und typeFace in Android?
- 11. Was ist der Unterschied zwischen Android Native Browser und Chrome
- 12. Was ist der Unterschied zwischen getDir und getFilesDir auf Android?
- 13. Was ist der Unterschied zwischen Android String.compareTo() und sqlite3_stricmp()?
- 14. Was ist der Unterschied zwischen getDecorView() und peekDecorView() in android
- 15. Was ist der Unterschied zwischen:.! und: r !?
- 16. Was ist der Unterschied zwischen Difftime und '-'?
- 17. Was ist der Unterschied zwischen $ und $$?
- 18. Was ist der Unterschied zwischen Verilog! und ~?
- 19. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 20. Was ist der Unterschied zwischen/* ... */und/** ... */
- 21. Was ist der Unterschied zwischen `&` und `ref`?
- 22. Was ist der Unterschied zwischen $ (...) und `...`
- 23. Was ist der Unterschied zwischen .Equals und ==
- 24. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 25. Was ist der Unterschied zwischen + = und = +?
- 26. Was ist der Unterschied zwischen? und ? = Nil
- 27. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 28. Was ist der Unterschied zwischen:
- 29. Was ist der Unterschied zwischen Cordova Build und Cordova Prepare
- 30. Was ist der Unterschied zwischen WebRTC, Jingle und XMPP?
ähnliche Fragen mit nützlichen Antworten: (http://stackoverflow.com/questions/4083787/runnable-is-posted-successfully-but-not-run) [Runnable ist erfolgreich, aber nicht ausgeführt geschrieben], [Was der Unterschied zwischen Activity.runOnUiThread (runnable action) und Handler.post()?] (http://stackoverflow.com/questions/1839625/whats-the-difference-between-activity-runonuithreadrunnable-action-and-handler), [Unterschied zwischen Handler.post (Runnable r) und Activity.runOnUiThread (Runnable r)] (http://stackoverflow.com/questions/7452884/difference-between-handler-postrunnable-r-and-activity-runonuithreadrunable) –