¿Alguien puede dar un ejemplo simple de actualizar un campo de texto cada segundo más o menos?
Quiero hacer una pelota voladora y necesito calcular / actualizar las coordenadas de la pelota cada segundo, por eso necesito algún tipo de temporizador.
No consigo nada de aquí .
Respuestas:
ok ya que esto no está aclarado todavía hay 3 formas simples de manejar esto. A continuación se muestra un ejemplo que muestra los 3 y en la parte inferior hay un ejemplo que muestra solo el método que creo que es preferible. También recuerde limpiar sus tareas en onPause, guardando el estado si es necesario.
Lo más importante que debe recordar es que la interfaz de usuario solo se puede modificar desde el hilo principal de la interfaz de usuario, por lo que debe usar un controlador o actividad.
Esto es lo que considero el método preferido.
fuente
¡Es simple! Creas un nuevo temporizador.
Luego extiendes la tarea del temporizador
Y luego agregue la nueva tarea al temporizador con un intervalo de actualización
Descargo de responsabilidad: esta no es la solución ideal. Esta es una solución que usa la clase Timer (como lo solicitó OP). En Android SDK, se recomienda utilizar la clase Handler (hay ejemplos en la respuesta aceptada).
fuente
Si también necesita ejecutar su código en el hilo de la interfaz de usuario (y no en el hilo del temporizador), eche un vistazo en el blog: http://steve.odyfamily.com/?p=12
fuente
Si solo desea programar una cuenta regresiva hasta un momento en el futuro con notificaciones regulares en intervalos en el camino, puede usar la clase CountDownTimer que está disponible desde el nivel 1 de API.
fuente
SS:MiMi
? GraciasEste es un código simple para un temporizador:
fuente
Creo que puedes hacerlo de forma Rx como:
Y cancela esto como:
Rx Timer http://reactivex.io/documentation/operators/timer.html
fuente
Debido a que esta pregunta sigue atrayendo a muchos usuarios de la búsqueda de Google (sobre el temporizador de Android), me gustaría insertar mis dos monedas.
En primer lugar, la clase Timer quedará obsoleta en Java 9 (lea la respuesta aceptada) .
La forma oficial sugerida es utilizar ScheduledThreadPoolExecutor, que es más efectivo y rico en funciones que, además, puede programar comandos para que se ejecuten después de un retraso determinado o para ejecutarse periódicamente. Además, brinda flexibilidad y capacidades adicionales de ThreadPoolExecutor.
Aquí hay un ejemplo del uso de funcionalidades simples.
Crear servicio de ejecutor:
Solo programe su carrera:
Ahora puede usar
future
para cancelar la tarea o verificar si se hace, por ejemplo:Espero que encuentres esto útil para crear tareas en Android.
Ejemplo completo:
fuente
Me sorprende que no haya una respuesta que mencione la solución con RxJava2 . Es realmente simple y proporciona una manera fácil de configurar el temporizador en Android.
Primero debe configurar la dependencia de Gradle, si aún no lo hizo:
(reemplazar
x
yy
con el número de versión actual )Como solo tenemos una TAREA simple, NO REPETITIVA , podemos usar
Completable
object:Para REPETIR TAREA , puede usar
Observable
de una manera similar:Schedulers.computation()
garantiza que nuestro temporizador se ejecute en el subproceso de fondo y.observeOn(AndroidSchedulers.mainThread())
significa que el código que ejecutamos después de que el temporizador finalice se realizará en el subproceso principal.Para evitar pérdidas de memoria no deseadas, debe asegurarse de darse de baja cuando se destruya Actividad / Fragmento.
fuente
Subscription
devuelto.subscribe()
en la variable y luego llamesubscription.unsubscribe()
cuando desee detener el temporizador.Él es una solución más simple, funciona bien en mi aplicación.
fuente
Desea que las actualizaciones de su interfaz de usuario sucedan en el hilo de interfaz de usuario ya existente.
La mejor manera es usar un controlador que use postDelayed para ejecutar un Runnable después de un retraso (cada ejecución programa la siguiente); borre la devolución de llamada con removeCallbacks.
Ya está buscando en el lugar correcto, así que mírelo nuevamente, quizás aclare por qué esa muestra de código no es lo que desea. (Consulte también el artículo idéntico en Actualización de la IU desde un temporizador ).
fuente
Aquí hay una manera simple y confiable ...
Ponga el siguiente código en su Actividad, y el método tick () se llamará cada segundo en el hilo de la interfaz de usuario mientras su actividad está en el estado "reanudado". Por supuesto, puede cambiar el método tick () para hacer lo que quiera o para que lo llamen con mayor o menor frecuencia.
Para aquellos interesados, el código "_h0 = _handler" es necesario para evitar que dos temporizadores se ejecuten simultáneamente si su actividad se detiene y se reanuda dentro del período de tick.
fuente
_h0
enfoque, en lugar deremoveCallbacks
enonPause
, como todos los demás?También puedes usar un animador para ello:
fuente
Necesita crear un hilo para manejar el ciclo de actualización y usarlo para actualizar el área de texto. Sin embargo, la parte difícil es que solo el hilo principal puede modificar la interfaz de usuario, por lo que el hilo del bucle de actualización debe indicarle al hilo principal que realice la actualización. Esto se hace usando un controlador.
Consulte este enlace: http://developer.android.com/guide/topics/ui/dialogs.html# Haga clic en la sección titulada "Ejemplo de Diálogo de progreso con un segundo hilo". Es un ejemplo de exactamente lo que debe hacer, excepto con un cuadro de diálogo de progreso en lugar de un campo de texto.
fuente
fuente
Si alguien está interesado, comencé a jugar creando un objeto estándar para ejecutarlo en un hilo de la interfaz de usuario de actividades. Parece funcionar bien. Comentarios bienvenidos Me encantaría que esté disponible en el diseñador de diseño como un componente para arrastrar a una Actividad. No puedo creer que algo así ya no exista.
En la actividad, tengo este onStart:
fuente
.xml
fuente
Si ya tienes tiempo delta.
fuente
I Abstract Timer y lo convertí en una clase separada:
Y extraer la acción principal de la
Timer
clase comoY lo usé así:
Espero que esto ayude 😊👌
fuente
Yo uso de esta manera:
luego debajo de onCreate
Es una manera fácil de resolver este problema.
fuente
Para aquellos que no pueden confiar en Chronometer , hice una clase de utilidad con una de las sugerencias:
para usar ... solo haz:
.....
fuente