Quando um aplicativo é executado em fundo, ele consome alguns dos recursos limitados do dispositivo, como a RAM. Isto pode resultar em uma experiência de usuário prejudicada, especialmente se o usuário estiver usando um aplicativo que consome muitos recursos, como jogar um jogo ou assistir a um vídeo. Para melhorar a experiência do usuário, o Android 8.0 (nível 26 da API) impõe limitações sobre o que os aplicativos podem fazer enquanto são executados em segundo plano. Este documento descreve as alterações no sistema operacional, e como você pode atualizar seu aplicativo para funcionar bem sob as novas limitações.

Qual é o serviço no android?

Primeiro atualizar o que é o serviço no Android? Conforme a documentação do andróide:

A Service é um componente da aplicação que pode realizar operações de longa duração em segundo plano, e não fornece uma interface de usuário.

Então, fundamentalmente o serviço é a mesma coisa que a atividade, mas não tem o componente UI nela. Portanto, ele não tem que executar animação suave a 60 fps. É por isso que ele pode executar qualquer tarefa por um período de tempo maior que a atividade.

Existem três tipos de serviço:

  • Serviço Iniciado – Um serviço é iniciado quando um componente de aplicação (como uma atividade) chama startService().
  • Serviço vinculado – Um serviço é vinculado quando um componente de aplicação se liga a ele chamando bindService().
  • Serviço Agendado – Um serviço é agendado quando uma API como a JobScheduler.

Aplicações em background vs. Foreground:

Para aprender as mudanças de execução em background, precisamos saber primeiro a diferença entre a aplicação em background e em foreground.

Regra geral, sua aplicação será considerada como um serviço em primeiro plano se algum dos três casos abaixo for verdadeiro:

  1. Sua aplicação tem atividade visível no momento.
  2. Sua aplicação tem serviço em primeiro plano rodando.
  3. Sua aplicação está conectada a outra aplicação em primeiro plano ligando o serviço ou consumindo seus provedores de conteúdo.

Se algum dos cenários acima não for verdadeiro na instância atual, sua aplicação é considerada em segundo plano.

Por que precisamos restringir o uso de serviços em segundo plano?

Quando suas aplicações rodam em segundo plano usando serviços, sua aplicação consome dois preciosos recursos: 1) Memória e 2) Bateria.

Estes dois são recursos limitados nos dispositivos móveis e a maioria dos dispositivos de baixo a médio alcance não tem muita memória ou bateria dentro dela.

Suponha, se seu aplicativo estiver fazendo algumas tarefas muito intensas em segundo plano e usando a maior quantidade de RAM para realizar essa tarefa, então isso criará a experiência de usuário muito junky, especialmente se o usuário estiver usando outro aplicativo de recursos intensivos, como jogar um jogo ou assistir a um vídeo em primeiro plano.

Como pela documentação do serviço iniciado a melhor prática é,

Quando a operação está completa, o serviço deve parar por si mesmo.

Mas, muitas aplicações têm serviços em segundo plano em execução longa, que basicamente corre por tempo infinito para manter a conexão socket com o servidor ou monitorar algumas tarefas ou atividade do usuário. Estes serviços criam esgotamento de bateria e também consomem memória constantemente.

De dois lançamentos anteriores do android (a partir de Marshmallow), o Google está a tentar aumentar a duração da bateria e reduzir o consumo de memória utilizado pelas aplicações, introduzindo o modo doze e o modo de espera da aplicação, atrasando a execução em segundo plano por algum tempo se o telefone estiver inactivo.

Mas na maioria das vezes, apesar de conhecer as desvantagens dos desenvolvedores de serviços de longa duração, ainda os utiliza. (Principalmente porque é fácil de implementar e manter ao invés de usar outras soluções de trabalho.)