Cómo medir el tiempo transcurrido

Tengo un juego de preguntas 10 y 20. Tengo que contar cuánto tiempo se pasa cuando un usuario termina el juego.

Timer T=new Timer(); T.scheduleAtFixedRate(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { public void run() { countdown.setText(""+count); count++; } }); } }, 1000, 1000); 

Yo uso esto para detener el contador:

 T.cancel(); 

Ahora necesito dos cosas:

  • Una forma de contar el tiempo transcurrido y almacenarlo en una variable
  • Necesito el valor final para ser un doble, por ejemplo la puntuación final es: 15,49 segundos.

3 Solutions collect form web for “Cómo medir el tiempo transcurrido”

Cuando el juego comienza:

 long tStart = System.currentTimeMillis(); 

Cuando el juego termina:

 long tEnd = System.currentTimeMillis(); long tDelta = tEnd - tStart; double elapsedSeconds = tDelta / 1000.0; 

Por los documentos Android SystemClock.elapsedRealtime() es la base de recomendación para el intervalo de intervalo de propósito general. Esto se debe a que, según la documentación, el tiempo transcurridoRealtime () is guaranteed to be monotonic, [...], so is the recommend basis for general purpose interval timing.

La documentación de SystemClock tiene una buena visión general de los diversos métodos de tiempo y los casos de uso aplicables para ellos.

  • SystemClock.elapsedRealtime() y SystemClock.elapsedRealtimeNanos() son la mejor SystemClock.elapsedRealtimeNanos() para calcular el tiempo de uso general transcurrido.
  • SystemClock.uptimeMillis() y System.nanoTime() son otra posibilidad, pero a diferencia de los métodos recomendados, no incluyen el tiempo en el sueño profundo. Si este es su comportamiento deseado, entonces están bien para usar. De lo contrario seguir con elapsedRealtime() .
  • Manténgase alejado de System.currentTimeMillis() ya que esto devolverá el tiempo de reloj "wall". Lo cual no es adecuado para calcular el tiempo transcurrido, ya que el reloj de pared puede saltar hacia delante o hacia atrás. Esto hará que los cálculos de tiempo transcurrido basados ​​en currentTimeMillis() no siempre sean precisos.

Cuando el juego comienza:

 long startTime = SystemClock.elapsedRealtime(); 

Cuando el juego termina:

 long endTime = SystemClock.elapsedRealtime(); long elapsedMilliSeconds = endTime - startTime; double elapsedSeconds = elapsedMilliSeconds / 1000.0; 

Además, Timer () es un temporizador de mejor esfuerzo y no siempre será preciso. Así que habrá una acumulación de errores de tiempo durante la duración del juego. Para mostrar con mayor precisión el tiempo provisional, utilice chequeos periódicos a System.currentTimeMillis() como base del tiempo enviado a setText(...) .

Además, en lugar de usar Timer , es posible que desee examinar el uso de TimerTask , esta clase está diseñada para lo que desea hacer. El único problema es que cuenta hacia abajo en vez de hacia arriba, pero que puede resolverse con una simple resta.

¡Aun mejor!

 long tStart = System.nanoTime(); long tEnd = System.nanoTime(); long tRes = tEnd - tStart; // time in nanoseconds 

Lea la documentación sobre nanoTime ()!

  • Androide. Cambio de brillo
  • ¿Cómo recuperar una lista de fuentes disponibles / instaladas en android?
  • Falta el menú "Annotation processing" en eclipse
  • Extraer texto fuera de una etiqueta HTML
  • Error de UnsatisfiedLink: Método nativo no encontrado findLibrary devuelto null
  • Fabric / Crashlytics NoClassDefFoundError sólo en ciertos dispositivos
  • Animación Android startOffset roto o buggy?
  • Los widgets que se pueden hacer clic en Android
  • Tamaño de una aplicación Android de Hello World
  • ¿Cómo saber si estoy en una llamada en Android?
  • Fije la posición del ratón en el dispositivo androide arraigado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.