Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

loops não executam no tempo certo.

Ola, estou com um problema em tentar executar loops de tempo perfeito em um serviço. Tenho o seguinte problema, chamar uma função a cada N tempo(num loop) que no meu caso seria mandar a localização, bem, esse loop funciona no tempo perfeito que defini de a cada 50s, quando esta conectado no carregador ou com a tela ligada, mas quando esta com a tela desligada e desconectado do carregador, o loop se ativa em tempos aleatórios de 2, 4, 10 minutos …, não tenho ideia do que pode ser isso.

Dispositivo testado com problema

Galaxy j5 Android 6.0.1

em outras versões de android, esse loop funciona perfeito em todas as situações.

Abaixo os 2 tipos de tentativa que tentei,

( savePositionOnDatabaseAndSendToSocket ) , manda a localização com a hora atual.

//com Runnable
Runnable sendLocationLoopRunnable = new Runnable() {

    @Override
    public void run() {
        if(mLocation != null){
            savePositionOnDatabaseAndSendToSocket();
        }

        mServiceHandler.postDelayed(this,50000);
        }
};
// Com CountDownTimer
CountDownTimer coutTimer = new CountDownTimer(86400000,50000) {

    @Override
    public void onTick(long millisUntilFinished) {
        if(mLocation != null){
            savePositionOnDatabaseAndSendToSocket();
        }
    }

    @Override
    public void onFinish() {

    }
};

Log observado no servidor.

// Desconectado e tela apagada.

  • 2018-02-25 17:21:03
  • 2018-02-25 17:22:34
  • 2018-02-25 17:24:44
  • 2018-02-25 17:26:20
  • 2018-02-25 17:28:14
  • 2018-02-25 17:30:04
  • 2018-02-25 17:32:03

// conectado ou tela acesa

  • 2018-02-25 17:33:01
  • 2018-02-25 17:33:51
  • 2018-02-25 17:34:41
  • 2018-02-25 17:35:31
  • 2018-02-25 17:36:21
  • 2018-02-25 17:37:11
  • 2018-02-25 17:38:01
  • 2018-02-25 17:38:51
  • 2018-02-25 17:39:41
  • 2018-02-25 17:40:31
3 respostas

Fala ai, tudo bem ?

Cara pode ser que esse aparelho possa ter algum limitador de recursos, dependendo da versão do sistema operacional.

Além disso, o próprio google recomenda não fazermos nada enquanto o app estiver com a tela desligada. Tanto que na versão 8 do android eles reduziram e muito esse tipo de serviço em background.

Puts, então na versão 8 ficou difícil ter aplicativos que mandam a localização em tempo real?, tipo de 5 em 5 segundos ...

solução!

Só se você estiver com o aplicativo aberto.

https://developer.android.com/about/versions/oreo/android-8.0-changes.html

Dá uma olhadinha nisso