Cómo mostrar temporizador en la actividad?
-
16-09-2019 - |
Pregunta
Necesito mostrar una duración de tiempo en algunas de mis actividades dentro de la aplicación. El temporizador se inicia cuando una de las actividades comienza.
- ¿Debo usar el servicio para el temporizador?
- ¿Es ésta la mejor manera?
- O debería iniciar el subproceso de uno de la actividad?
Solución
Creo que en el caso de uso que usted describe lo mejor sería que Tienda marcas de tiempo (ver Almacenamiento de datos ) y Calcular los deltas de uso GUI. Si necesita mostrar un reloj en tiempo real en una de sus actividades puede crear un hilo separado en esa actividad sólo para actualizar el reloj.
Otros consejos
Bueno, dependiendo de la cantidad de trabajo que necesita la interfaz para mostrar su progreso, comenzaría un hilo dentro de la actividad y luego crear un temporizador que comprueba el estado del avance de hilo y actualiza la interfaz, según sea necesario. Los servicios son buenos para las tareas de fondo que no requieren una gran cantidad de interfaz de notificación / actualizaciones.
Este es un ejemplo de un proyecto que estoy trabajando actualmente en (UpdateListRunnable sólo llama "notifyDataSetChanged ()" en mi adaptador lista. Lo hago varias veces en el código así que encapsula en una clase. Además, updateHandler es sólo un ejemplo habitual Handler):
@Override
public void run() {
Timer updateProgressTimer = null;
UpdateItem currentItem = null;
for(int i = 0; i < items.size(); i++) {
currentItemIndex = i;
currentItem = items.get(i);
if (currentItem.isSelected() == true) {
updateProgressTimer = new Timer();
updateProgressTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
updateHandler.post(new UpdateListRunnable());
}
}, 0, 2000); // check every 2 seconds
lookupDb.downloadUpdate(currentItem);
currentItem.setUpToDate(true);
currentItem.setStatusCode(UpdateItem.UP_TO_DATE);
currentItem.setProgress(0);
updateProgressTimer.cancel();
updateHandler.post(new UpdateListRunnable());
} // end if its the database we are hosting on our internal server
} // end for loop through update items
currentItemIndex = -1;
} // end updateThread run