Timing bug en nuestro juego, currentTimeMillis congelar?

Al probar nuestro juego, que es muy dependiente de System.currentTimeMillis() , estamos experimentando un error molesto.

Nuestro juego utiliza una serie de marcas de tiempo delta que indica cuándo deben suceder ciertas cosas. Estas marcas de tiempo coinciden con una pieza musical que se está reproduciendo.

Pruebas en casa no nos da ningún problema en absoluto. Es imposible reproducir el error durante las pruebas desde nuestra casa.

Pero probar mientras conducíamos en el coche, entre ciudades, nos da problemas de sincronización entre las marcas de tiempo y la música. Mi mejor conjetura es que Android congelar el sistema, incluyendo el temporizador del sistema, ya que es la red de conmutación, o en busca de una señal?

He intentado insertar una falsa hick-up en el juego, haciendo que el hilo dormir unos segundos cuando presiono un botón determinado. Esto congela la pantalla (obviamente), pero todo sigue sincronizando bien cuando el sueño ha terminado.

La única manera de reproducir este error, es tomar un viaje en coche o autobús o tren – que, por supuesto, es muy probablemente donde la mayoría de la gente será cuando se juega nuestro juego.

La pregunta es, por supuesto,

  • ¿Qué hacer al respecto?

  • ¿Alguien tiene alguna idea?

Lea SystemClock .

System.currentTimeMillis () es el reloj estándar de "pared" (hora y fecha) que expresa milisegundos desde la época. El reloj de pared puede ser configurado por el usuario o la red telefónica (ver setCurrentTimeMillis (largo)), de manera que el tiempo puede saltar hacia atrás o hacia adelante impredeciblemente.


UptimeMillis () se cuenta en milisegundos desde que se inició el sistema. Este reloj se detiene cuando el sistema entra en suspensión profunda (CPU apagado, pantalla oscura, el dispositivo espera la entrada externa), pero no se ve afectado por la escala de reloj, ralentí u otros mecanismos de ahorro de energía. Esta es la base para la mayoría de intervalos de tiempo, como Thread.sleep (millls), Object.wait (millis) y System.nanoTime () . Este reloj está garantizado para ser monótono , y es adecuado para el intervalo de tiempo cuando el intervalo no se extiende el sueño del dispositivo.

Creo que es mejor usar System.nanoTime () .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.