¿Cuáles son las diferencias/ventajas/desventajas entre el uso de Activity.runOnUiThread
o Handler.post(runnable action)
en android?¿Cuál es la diferencia entre Activity.runOnUiThread (acción ejecutable) y Handler.post()?
Respuesta
Activity.runOnUiThread, como su nombre lo indica, ejecutará Runnable en el hilo que actualmente es responsable de la interfaz de usuario. Por lo tanto, si tiene una tarea intensiva de CPU, puede hacer que la UI no responda por un corto período de tiempo. Por el contrario, Handler proporciona una forma de crear un hilo, ejecutar un código y notificar a la interfaz de usuario cuando haya terminado (es decir, Handler.sendMessage).
la documentación para el estado Handler esto mejor que puedo:
Cuando se crea un proceso para su aplicación , su hilo principal es dedicada a la ejecución de una cola de mensajes que se encarga de la gestión de la objetos de aplicación de nivel superior (actividades, receptores de difusión, etc.) y cualquier ventana que creen. Puede crear sus propios hilos, y comunicarse con el hilo de aplicación principal a través de un controlador. Esto se hace llamando a la misma publicación o métodos sendMessage como antes, pero desde su nuevo hilo. El Runnable o Message dado será programado en la cola del mensaje del Manejador y procesado cuando sea apropiado.
Activity.runOnUiThread()
es un caso especial de los manipuladores más genéricos. Con Handler
puede crear su propia consulta de evento dentro de su propio hilo. El uso de controladores creados con el constructor predeterminado no significa que "el código se ejecutará en el hilo de UI" en general. De forma predeterminada, los manejadores se vincularon a Thread desde el que se crearon las instancias. Para crear Handler que está garantizado para unirse a la interfaz de usuario (principal) Tema debe crear Handlerobject binded a la información principal Looper así:
Handler mHandler = new Handler(Looper.getMainLooper());
Por otra parte, si se comprueba la aplicación de runOnuiThread()
método, se usa Handler hacer las cosas:
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
Como se puede ver en el fragmento de código anterior, la acción Ejecutable serán ejecutadas inmediatamente, si runOnUiThread()
se llama desde el subproceso de interfaz de usuario. De lo contrario, lo publicará en el controlador, que se ejecutará en algún momento posterior.
- 1. ¿Cuál es la diferencia entre {0} y ""?
- 2. Cuál es la diferencia entre = y: =
- 3. ¿Cuál es la diferencia entre .ToString (+) y ""
- 4. Cuál es la diferencia entre $ (...) y `...`
- 5. ¿cuál es la diferencia entre:.! y: r !?
- 6. ¿Cuál es la diferencia entre ".equals" y "=="?
- 7. ¿Cuál es la diferencia entre dict() y {}?
- 8. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 9. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 10. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 11. ¿Cuál es la diferencia entre + = y = +?
- 12. ¿Cuál es la diferencia entre " " y ""?
- 13. Cuál es la diferencia entre $ y jQuery
- 14. ¿Handler.post (ejecutable) inicia un nuevo hilo?
- 15. ¿Cuál es la diferencia entre números flotantes duros y blandos?
- 16. ¿Cuál es la diferencia entre la conexión de salida y la conexión de acción?
- 17. ¿Cuál es la diferencia entre estas funciones?
- 18. ¿Cuál es la diferencia entre scala @Serializable y Java Serializable?
- 19. ¿Cuál es la diferencia entre el código de compilación y el código ejecutable?
- 20. ¿Cuál es la diferencia entre el formato binario simple (.bin) y el ejecutable de Windows (.exe)?
- 21. ¿Cuál es la diferencia entre [AcceptVerbs (HttpVerbs.Post)] y [HttpPost]?
- 22. ¿Cuál es la diferencia entre ACTION_CANCEL y ACTION_UP en MotionEvent?
- 23. ¿Cuál es la diferencia entre la nueva Acción() y una lambda?
- 24. Diferencia entre procesamiento: acción y procesamiento: plantilla
- 25. ¿Cuál es la diferencia entre CreateObject y Wscript.CreateObject?
- 26. ¿Cuál es la diferencia entre (cadena [] args) y System.Environment.CommandLine?
- 27. OpenGL (ES) - ¿Cuál es la diferencia entre frustum y orto?
- 28. Cuál es la diferencia entre la función() {}() y la función() {}()
- 29. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 30. ¿Cuál es la diferencia entre Ctrl-C y SIGINT?
pregunta similar: [Diferencia entre Handler.post (r Ejecutable) y Activity.runOnUiThread (r Ejecutable)] (http://stackoverflow.com/questions/7452884/difference-between-handler-postrunnable-r-and -activity-runonuithreadrunnable) –