O serviço de um aplicativo é interrompido quando o telefone não está sendo cobrado

Minha atividade inicia um serviço chamandostartservice(). Para simplificar meu problema, vamos dizer que o serviço será um contador e o contador será aumentado a cada 10 s.

Timer t_counter;
int counter = 0; 

@Override   
public int onStartCommand(Intent intent, int flags, int startId) {

    t_counter = new Timer();
    t_counter.schedule(new TimerTask() { 
        @Override
        public void run() {
            counter++;
            Log.d("counter: ",Integer.toString(counter));
        }}, 0, 10000);

    return Service.START_STICKY;
}   

Quando o telefone está sendo carregado (ou no modo de depuração - já que posso ver oLogcat) o serviço funciona como esperado. Em cada 10 segundosLogcat mostra as informações de depuração, sempre que o aplicativo estiver em segundo plano ou não. Mas quando eu desliguei o telefone, o serviço parou de funcionar depois de um tempo. Evento quando o aplicativo (Atividade que iniciou o serviço) está ativo. Observe que o serviço não foi destruído, apenas colocado em espera ou algo assim.

Porque quando eu conecto o celular novamente, o temporizador continua e o valor do contador está sendo aumentado a partir do valor onde eu apenas desconectei o telefone. Portanto, se o serviço foi destruído, o valor seria zero novamente. (também depurando o ciclo de vida do serviço e não consigo veronStartCOmmand(), onDestroy() teria sido chamado)

Eu procurei soluções para isso, mas acho que não tenho a resposta certa para esse comportamento. Eu sei que devo usarAlarmManager em vez de Timer. Ou também funcionaria se eu colocasse o serviçoprimeiro plano porstartForeground()ou talvez separadoprocesso resolveria esse problema. Mas gostaria de saber por que minha solução está trabalhando com cobrança. Também onde posso encontrar informações sobre esse estado "inativo" de um serviço. (não executando cronogramas, mas não destruídos) Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion