¿Alguien puede decirme si hay alguna diferencia entre usar runOnUiThread () versus Looper.getMainLooper (). Post () para ejecutar una tarea en el hilo de la interfaz de usuario en Android?
Casi lo único que puedo determinar es que, dado que runOnUiThread es un método de actividad no estático, Looper.getMainLooper (). Post () es más conveniente cuando necesita codificar algo en una clase que no puede ver la actividad (como una interfaz).
No estoy buscando una discusión sobre SI algo debería ejecutarse en el hilo de la interfaz de usuario, entiendo que algunas cosas no pueden y muchas cosas no deberían, sin embargo, algunas cosas (como iniciar una AsyncTask) DEBEN ejecutarse desde el hilo de la interfaz de usuario.
Gracias,
R.
android
android-ui
Rico
fuente
fuente
runOnUiThread
verificará si ya es el hilo de la interfaz de usuario y ejecutará su tarea directamente en lugar de publicarla comoMessage
Respuestas:
Lo siguiente se comporta igual cuando se llama desde subprocesos en segundo plano:
utilizando
Looper.getMainLooper()
utilizando
Activity#runOnUiThread()
La única diferencia es cuando haces eso desde el hilo de la interfaz de usuario, ya que
comprobará si el hilo actual ya es el hilo de la interfaz de usuario y luego lo ejecutará directamente. Publicarlo como un mensaje retrasará la ejecución hasta que regrese del método actual de UI-thread.
También hay una tercera forma de ejecutar un
Runnable
en el hilo de la interfaz de usuario, que seríaView#post(Runnable)
: esta siempre publicará el mensaje incluso cuando se llame desde el hilo de la interfaz de usuario. Eso es útil ya que asegurará queView
se haya construido correctamente y tenga un diseño antes de que se ejecute el código.fuente