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?
¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top