Desarrollé una aplicación para mostrar texto a intervalos definidos en la pantalla del emulador de Android. Estoy usando la Handler
clase Aquí hay un fragmento de mi código:
handler = new Handler();
Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
}
};
handler.postDelayed(r, 1000);
Cuando ejecuto esta aplicación, el texto se muestra solo una vez. ¿Por qué?
android
multithreading
Rajapandian
fuente
fuente
Respuestas:
La solución simple a su ejemplo es:
O podemos usar hilo normal, por ejemplo (con Runner original):
Puede considerar su objeto ejecutable solo como un comando que se puede enviar a la cola de mensajes para su ejecución, y el controlador como solo un objeto auxiliar utilizado para enviar ese comando.
Más detalles están aquí http://developer.android.com/reference/android/os/Handler.html
fuente
fuente
Creo que puede mejorar la primera solución de Alex2k8 para la actualización correcta cada segundo
1.código original:
2.Análisis
tv.append("Hello Word")
costo T milisegundos, después de mostrar 500 veces el tiempo de retraso es 500 * T milisegundos3. Solución
Para evitar eso Simplemente cambie el orden de postDelayed (), para evitar retrasos:
fuente
Para repetir la tarea, puede usar
llámalo como
Dónde
tarea siendo el método a ejecutar
después del tiempo de ejecución inicial
( Intervalo de tiempo para repetir la ejecución)
En segundo lugar
Y también puede usar CountDownTimer si desea ejecutar una Tarea varias veces.
Y también puedes hacerlo con runnable. crear un método ejecutable como
Y llámalo de ambas maneras
O
fuente
Creo que para este caso típico, es decir, ejecutar algo con un intervalo fijo,
Timer
es más apropiado. Aquí hay un ejemplo simple:Usar
Timer
tiene pocas ventajas:schedule
argumentos de la funciónmyTimer.cancel()
myTimer.cancel()
antes de programar uno nuevo (si myTimer no es nulo)fuente
fuente
r
que está definida todavía.Si entiendo correctamente la documentación del método Handler.post ():
Entonces, los ejemplos proporcionados por @ alex2k8, aunque funcionan correctamente, no son los mismos. En caso de que
Handler.post()
se use, no se crean nuevos hilos . Simplemente publicaRunnable
en el hiloHandler
para que EDT lo ejecute . Después de eso, EDT solo se ejecutaRunnable.run()
, nada más.Recuerde:
Runnable != Thread
.fuente
Kotlin
Java
fuente
Un ejemplo interesante es que puedes ver continuamente un contador / cronómetro corriendo en un hilo separado. También muestra la ubicación GPS. Mientras que la actividad principal User Thread ya está allí.
Extracto:
Para ver el código ver aquí:
Ejemplo de subproceso que muestra la ubicación GPS y la hora actual ejecutables junto con el subproceso de interfaz de usuario de la actividad principal
fuente
ahora en Kotlin puedes ejecutar hilos de esta manera:
fuente
Kotlin con corutinas
En Kotlin, usando corutinas puede hacer lo siguiente:
Pruébalo aquí !
fuente