Temporizador de Android que funciona cuando el dispositivo está en suspensión

Estoy escribiendo una aplicación deportiva que necesita rastrear el tiempo transcurrido del trimestre / medio / período. El tiempo transcurrido debe ser preciso al segundo. El reloj del juego debe continuar ejecutándose incluso si el usuario coloca explícitamente el dispositivo en modo de suspensión presionando el botón de encendido.

Mi primer intento en esto implicó usarHandler.postDelayed () para activar el reloj marca cada 200 ms yWindowManager.LayoutParms.FLAG_KEEP_SCREEN_ON para garantizar que el "reloj" no se haya detenido por un tiempo de espera de la pantalla. Pero pronto aprendí que era posible eludir este enfoque presionando el botón de encendido para poner el dispositivo en suspensión manualmente. Además, el enfoque postDelayed () está experimentando cierta desviación del reloj, aparentemente como resultado del tiempo empleado en el método run (). Los números reales siguen siendo precisos, pero en lugar de estar alineados, por ejemplo, en límites de 5 segundos que los usuarios entienden fácilmente: los temporizadores involucrados comienzan a desviarse, lo que genera una confusión comprensible para el usuario.

Después de un poco de investigación encontré técnicas para usar servicios,temporizadores de Java, AlarmManageryPartialWakeLock para implementar temporizadores. Los servicios por sí solos no resolverán el problema asociado con la suspensión del dispositivo. Los temporizadores Java, como los servicios, no resuelven el problema con el dispositivo que se va a dormir. AlarmManager parece un buen enfoque, pero me preocupa que este no sea un uso apropiado de AlarmManager (es decir, intervalos muy cortos entre alarmas). Usar PartialWakeLock también parece prometedor, pero por sí solo no resuelve el problema de deriva del reloj que estoy experimentando.

Voy a probar una combinación de AlarmManager y PartialWakeLock. La idea es que AlarmManager ayudará a combatir la deriva del reloj y PartialWakeLock para ayudar a mantener el código simple (cruzado con los dedos). Espero que este enfoque dé como resultado un equilibrio razonable entre la conservación de energía, la complejidad del código y las expectativas del usuario. Cualquier consejo es muy apreciado.

Gracias,

Rico

Respuestas a la pregunta(2)

Su respuesta a la pregunta