O que é um service e como funciona no desenvolvimento de apps?

Um service (serviço) é um componente do Android que pode realizar trabalho sem ter a sua própria interface de utilizador, como reproduzir música, sincronizar dados ou uma transferência de ficheiros em curso. Juntamente com as atividades, os broadcast receivers e os content providers, os serviços são um dos quatro componentes fundamentais de uma app Android e, tal como os outros, têm de ser registados no AndroidManifest.xml da app. Por predefinição, um serviço é executado no thread principal da app, pelo que o trabalho pesado continua a ter de ser transferido para um thread em segundo plano.

O Android distingue entre serviços iniciados (started services), que realizam uma tarefa até serem parados, e serviços vinculados (bound services), aos quais outros componentes se podem vincular para comunicar com eles. Um serviço em primeiro plano realiza trabalho de que o utilizador tem conhecimento e tem de mostrar uma notificação persistente. Como o trabalho em segundo plano afeta a autonomia da bateria e o desempenho, o Android tem introduzido gradualmente restrições sobre quando as apps podem iniciar serviços em segundo plano, e para o trabalho adiável a Google recomenda normalmente o WorkManager em alternativa.

Um service no Android é um componente da app que realiza trabalho sem interface de utilizador própria, como a reprodução de música, a sincronização ou as transferências de ficheiros. Pode ser iniciado para realizar uma tarefa ou vinculado por outros componentes que pretendam comunicar com ele. Os serviços em primeiro plano mostram uma notificação persistente para que o utilizador saiba que o trabalho está a decorrer e, devido às restrições do Android ao trabalho em segundo plano, o WorkManager é frequentemente utilizado para tarefas adiáveis.

Mais sobre Service

Um service é um dos quatro componentes fundamentais de uma app Android, juntamente com as atividades, os broadcast receivers e os content providers. Enquanto uma atividade mostra um ecrã com o qual o utilizador interage, um serviço é utilizado para trabalho que não exige interface de utilizador ou que tem de continuar mesmo que o utilizador saia do ecrã. Exemplos típicos são a reprodução de música ou podcasts, a navegação, o carregamento de ficheiros e a sincronização de dados com um servidor.

Tecnicamente, um serviço é uma classe que herda de android.app.Service e é registada com um elemento service no AndroidManifest.xml. O sistema controla o ciclo de vida do serviço através de métodos como onCreate(), onStartCommand(), onBind() e onDestroy(). É importante saber que um serviço não é executado automaticamente num thread separado. Por predefinição, o seu código é executado no thread principal da app, pelo que o trabalho demorado ou bloqueante tem de ser transferido para um thread em segundo plano, por exemplo com corrotinas do Kotlin, para evitar que a app deixe de responder.

Os serviços podem ser utilizados de diferentes formas, cada uma adequada a necessidades diferentes:

  1. Serviço em primeiro plano: Realiza trabalho de que o utilizador tem conhecimento, como a reprodução de música ou o registo ativo de um treino. Um serviço em primeiro plano tem de mostrar uma notificação persistente e, nas versões mais recentes do Android, a app tem de declarar um tipo de serviço e ter as permissões associadas.

  2. Serviço em segundo plano: Realiza trabalho que o utilizador não vê diretamente. Desde o Android 8.0, existem restrições rigorosas sobre quando as apps podem iniciar esses serviços enquanto elas próprias estão em segundo plano.

  3. Serviço vinculado: Oferece uma interface cliente-servidor em que outros componentes, incluindo os de outras apps, se podem vincular ao serviço, enviar pedidos e receber respostas. Um serviço vinculado existe enquanto pelo menos um componente estiver vinculado a ele.

Um dos maiores pontos fortes dos serviços é permitirem que uma app continue trabalho importante sem que este esteja ligado a um ecrã específico. Ao mesmo tempo, exigem cuidado, porque o trabalho em segundo plano consome bateria, memória e dados. Por isso, o Android tem introduzido gradualmente regras que restringem o trabalho em segundo plano, e os utilizadores podem ver e parar as apps que estão a executar serviços em primeiro plano.

Para muitas tarefas, a Google recomenda antes o WorkManager, que faz parte do Android Jetpack. O WorkManager destina-se a trabalho que tem de ser realizado de forma fiável, mesmo que a app seja fechada ou o dispositivo reiniciado, e que pode ser adiado, como o carregamento de ficheiros de registo ou a sincronização periódica. O WorkManager tem em conta as restrições do sistema e pode ser configurado com condições como uma ligação de rede ou o carregamento da bateria.

Em resumo, um serviço é a escolha certa quando uma app precisa de realizar trabalho contínuo que o utilizador espera que continue, ou quando outros componentes precisam de comunicar com um processo de longa duração. Ao escolher o tipo de serviço certo, ou o WorkManager quando o trabalho pode ser adiado, os programadores podem criar apps simultaneamente funcionais e moderadas no uso dos recursos do dispositivo.

Perguntas frequentes sobre Service

O que é um service no Android?

Um service é um componente do Android que realiza trabalho em segundo plano sem ter a sua própria interface de utilizador. É utilizado para tarefas que precisam de continuar mesmo quando o utilizador não está a olhar para a app, como reproduzir música, a navegação em curso ou o carregamento de ficheiros.

Um serviço tem de ser declarado no ficheiro AndroidManifest.xml. É importante saber que, por predefinição, um serviço é executado no thread principal da app. Por isso, as tarefas pesadas continuam a ter de ser transferidas para um thread em segundo plano ou para uma corrotina. Nas versões mais recentes do Android, existem também regras rigorosas sobre quando as apps podem ser executadas em segundo plano, a fim de poupar bateria.

Que tipos de service existem no Android?

O Android distingue entre três tipos de serviço. Um serviço em primeiro plano realiza uma tarefa de que o utilizador tem conhecimento e tem de mostrar uma notificação enquanto estiver em execução. É utilizado, por exemplo, para a reprodução de música ou o registo de uma corrida.

Um serviço em segundo plano realiza trabalho que o utilizador não vê diretamente. Desde o Android 8.0, existem restrições rigorosas sobre quando as apps podem iniciar esses serviços, e recomenda-se o WorkManager em alternativa para muitas tarefas. Um serviço vinculado permite que outros componentes, como uma atividade, se vinculem a ele e comuniquem com ele, e só é executado enquanto algo estiver vinculado a ele.

Qual é a diferença entre um serviço iniciado e um serviço vinculado?

Um serviço iniciado é iniciado com startService ou startForegroundService e é executado até se parar a si próprio ou ser parado. Realiza normalmente uma tarefa específica e não devolve diretamente um resultado ao componente que o iniciou.

Um serviço vinculado é iniciado quando outro componente se vincula a ele com bindService. Disponibiliza uma interface para que o componente possa chamar métodos e receber respostas, por exemplo uma atividade que controla um leitor de música. Quando deixa de haver componentes vinculados, é parado. Um serviço também pode ser as duas coisas ao mesmo tempo, se for simultaneamente iniciado e vinculado.

Quando deve ser utilizado o WorkManager em vez de um service?

O WorkManager é a solução recomendada pela Google para trabalho em segundo plano que tem de ser realizado de forma fiável, mesmo que a app seja fechada ou o dispositivo reiniciado. Pode tratar-se da sincronização de dados, do carregamento de ficheiros de registo ou de uma limpeza periódica.

O WorkManager respeita as regras do sistema relativas à bateria e à atividade em segundo plano e pode ser configurado para ser executado apenas quando, por exemplo, o dispositivo está ligado a Wi-Fi ou a carregar. Um serviço, especialmente um serviço em primeiro plano, é mais relevante quando o trabalho tem de acontecer imediatamente e é visível para o utilizador, como a reprodução de música ou uma chamada em curso. Para trabalho de curta duração enquanto a app está aberta, as corrotinas são muitas vezes suficientes.

Porque é que um serviço em primeiro plano tem de mostrar uma notificação?

Um serviço em primeiro plano pode ser executado durante muito tempo e utilizar recursos como o processador, a bateria e os dados de localização enquanto o utilizador não tem a app aberta. Por isso, o Android exige que mostre uma notificação persistente, para que o utilizador saiba que a app está a trabalhar em segundo plano.

Isto proporciona transparência e permite ao utilizador parar o serviço ou abrir a app. Nas versões mais recentes do Android, os programadores também têm de declarar um tipo para o serviço, como reprodução de multimédia, localização ou sincronização de dados, e ter as permissões associadas. A partir do Android 13, o utilizador também tem de conceder permissão para notificações, o que afeta a forma como a notificação é mostrada.

Que restrições impõe o Android ao trabalho em segundo plano?

Para poupar bateria e proteger a privacidade do utilizador, o Android tem introduzido gradualmente restrições ao trabalho em segundo plano. Desde o Android 8.0, as apps em segundo plano não podem, em geral, iniciar serviços em segundo plano comuns, e o sistema para-os passado pouco tempo.

O modo Doze e o App Standby adiam o acesso à rede e as tarefas agendadas quando o dispositivo não está a ser utilizado ou a app é raramente utilizada. As versões mais recentes exigem tipos e permissões para os serviços em primeiro plano e restringem quando estes podem ser iniciados a partir do segundo plano. O acesso à localização em segundo plano exige uma permissão separada. Por isso, o trabalho em segundo plano deve ser agendado com o WorkManager sempre que possível.

Service para manequins

Um service numa app Android é uma espécie de ajudante invisível que pode continuar a trabalhar mesmo quando ninguém está a olhar para a app. Pensa numa app de música: podes pôr uma música a tocar, voltar ao ecrã principal e escrever uma mensagem, e a música continua a tocar. É um service que trata disso. Quando uma app usa um service para algo de que deves ter conhecimento, o telemóvel mostra uma pequena notificação, para que fique claro que a app está a trabalhar. Ao mesmo tempo, o Android garante que as apps não gastam demasiada energia em segundo plano, para que a bateria dure mais.

Deixe um comentário