para actualizar la interfaz gráfica de usuario de otros temas, hay básicamente dos enfoques principales:interfaz gráfica de usuario Actualización: Runnables vs Mensajes
Uso java.lang.Runnable con cualquiera de estos métodos:
Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) Handler.post(Runnable)
uso android.os.Message:
Handler.sendMessage(Message)/Handler.handleMessage(Message)
También puede usar AsyncTask, pero mi pregunta está más centrada en el caso de uso de actualizar un componente muy simple. Vamos a ver cómo se llevaría a cabo utilizando los dos sistemas:
Uso Runnables:
TextViev tv = ...; final String data = "hello"; Runnable r = new Runnable() { @Override public void run(){ tv.setText(data); } }; //Now call Activity.runOnUiThread(r) or handler.post(r), ...
Uso de mensajes:
Message m = handler.obtainMessage(UPDATE_TEXT_VIEW, "hello"); handler.sendMessage(m); //Now on handler implementation: @Override public void handleMessage(Message msg) { if(msg.what == UPDATE_TEXT_VIEW){ String s = (String) msg.obj; tv.setText(data); } ... //other IFs? }
en mi humilde opinión, los mensajes no son el camino a ir porque:
- No es fácil de entender para los nuevos programadores no androides (los enganches del manejador a su rosca durante la construcción).
- La carga útil del objeto debe ser Parcellable si el mensaje cruza los límites del proceso.
- Los mensajes son reutilizados (propenso a errores si no se limpian adecuadamente?)
- El controlador tiene una doble función (que envía mensajes, sino que también se ocupa de ellos)
- atributos de mensajes son públicos, pero también ofrecen captador/definidor.
Por otro lado, Runnables sigue el conocido patrón de comandos, y son más amigables con los programadores y legibles.
¿Cuáles son las ventajas de usar Messages over Runnables? ¿Los mensajes están en segundo plano en la programación de Android moderna? ¿Hay algo que puedas hacer con los mensajes que no se pueden hacer con ejecutables?
Gracias de antemano.
Ok, tal vez la idea no está claramente expuesta en mi pregunta. No es Handler vs Runnables, sino Handler.sendMessage vs las alternativas Runnable. (Este grupo incluye también 'Handler.postDelayed' y' Handler.postAtTime', que cubren el n. ° 1) –
. De hecho, explicaste bien la diferencia en tu publicación. No conozco ninguna otra diferencia que pueda agregar a eso. – Caner