Kotlin segundo plano

(1/1)

pepetonic2001:
Hola.
Tengo un cronómetro creado en un servicio al que llamo desde uno de los activity de la app.
Un el  onCreate del activity lo declaro:
Cronometro2.setUpdateListener(this)

Con un botón lo pongo en marcha:
startService(Intent(this, Cronometro2::class.java))

Con otro botón lo paro:
stopService(Intent(this, Cronometro2::class.java))

El problema que tengo es que si doy al Power del móvil que se apaga la pantalla y a los pocos segundos lo vuelvo al pulsar, al encenderse la pantalla sí que continúa el cronómetro en marcha, pero si tardo unos minutos en encenderlo, el cronómetro está detenido, no ha estado incrementándose en ese tiempo, ni se reanuda al volverse a encender, tengo que volver a arrancarlo.

He probado desde el setup del móvil eliminar todo el tema de ahorro de batería.
Tampoco he conseguido nada con window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

public class Cronometro2 extends Service {
    private Timer temporizador = new Timer();
    private static final long INTERVALO_ACTUALIZACION = 10;
    public static CrearRuta UPDATE_LISTENER;
    private double cronometro = 0;
    private Handler handler;

    public static void setUpdateListener(CrearRuta poiService) {
        UPDATE_LISTENER = poiService;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        iniciarCronometro();

        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                UPDATE_LISTENER.updateStopWatchView(cronometro);
            }
        };
    }

    @Override
    public void onDestroy() {
        pararCronometro();
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    private void iniciarCronometro() {
        temporizador.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                cronometro += 0.01;
                handler.sendEmptyMessage(0);
            }
        }, 0, INTERVALO_ACTUALIZACION);
    }

    private void pararCronometro() {
        if (temporizador != null)
            temporizador.cancel();
    }
}

Navegación

[0] Índice de Mensajes