Sobes.tech
Intern

Qual é a diferença entre um serviço em segundo plano e um serviço em segundo plano no Android?

sobes.tech IA

Resposta da IA

A diferença entre um serviço em segundo plano normal e um serviço em segundo plano limitado (restricted) surgiu com o Android 8.0 (API 26).

Serviço em segundo plano normal:

  • Pode funcionar indefinidamente em segundo plano.
  • O sistema pode terminá-lo por falta de recursos, mas pode reiniciá-lo se START_STICKY for retornado em onStartCommand().
  • Não requer notificações visíveis ao usuário (embora isso não seja a melhor prática do ponto de vista de UX).
  • Pode consumir recursos significativos de bateria e CPU.

Serviço em segundo plano limitado (restrições aplicadas):

  • Um serviço iniciado em segundo plano sem atividades visíveis ou outras "listas brancas" (condições privilegiadas) enfrenta restrições no uso de recursos.
  • As principais restrições incluem:
    • Restrição na execução em segundo plano: O sistema pode parar o serviço em pouco tempo (geralmente alguns minutos) após a aplicação passar para o segundo plano.
    • Proibição de iniciar novos serviços em segundo plano: A aplicação em segundo plano não pode iniciar novos serviços em segundo plano usando startService(). Em vez disso, deve usar JobScheduler ou WorkManager.
    • Restrição na recepção de mensagens broadcast: As mensagens broadcast implícitas no manifesto serão ignoradas. A aplicação deve registrar explicitamente receptores de broadcast ou usar JobScheduler/WorkManager para lidar com eventos.
  • O objetivo dessas restrições é melhorar a duração da bateria e o desempenho do dispositivo, limitando o uso irracional de recursos por aplicações em segundo plano.

Como um serviço se torna não limitado (ativo aos olhos do sistema):

  • A aplicação está em primeiro plano (o usuário interage ativamente com ela).
  • A aplicação inicia um serviço visível (foreground service), que exibe uma notificação constante ao usuário.
  • A aplicação realiza tarefas específicas (por exemplo, processamento de mensagens broadcast, execução de tarefas JobScheduler) que temporariamente a retiram do estado de trabalho irracional completo em segundo plano.

Diferença principal: Com Android 8.0 e versões superiores, um serviço que funciona em segundo plano sem atividade visível do usuário ou serviço visível será limitado pelo sistema em termos de acesso a recursos e capacidade de trabalhar por longos períodos. O "serviço em segundo plano" normal antes do Android 8.0 podia funcionar sem essas restrições estritas.