Service no Android, Entendendo e Utilizando
(16575) (16)
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
CategoriaDesenvolvimento Web
Autor(es)Robert C. Martin
EditoraAlta Books
Edição1ª
Ano2023
Páginas416
Tudo bem?
Alguém aí falou "Processamento em background enquanto o aplicativo está em primeiro plano (foreground)"? Ou seja, processamento em paralelo enquanto o aplicativo está aberto?
Sim, é isso mesmo.
Para processamentos fora da Thread Principal enquanto o aplicativo ainda está sendo utilizado pelo usuário, a API Service (e APIs filhas, como o IntentService) é ainda uma das melhores, se não a melhor, escolha no desenvolvimento Android.
Na vídeo aula acima vamos, passo a passo, destrinchar toda a Service API (e algumas outras APIs auxiliares).
Se você é desenvolvedor de linguagens como Java e C# então você deve estar familiarizado com o processamento paralelo de tarefas por meio de threads secundárias.
Isso também é possível no Android, utilizar uma Worker Thread diretamente em código.
Mas para processamentos que levam tempo (pesados) e devem ser executados em paralelo ao uso do aplicativo em primeiro plano, há inúmeras APIs nativas justamente para esse tipo de tarefa.
A Service API é uma excelente escolha também para o tipo de processamento citado acima, principalmente devido à simplicidade de uso e fácil gerenciamento do ciclo de vida de um objeto de serviço.
Thiengo, por que "(...) também" e não "somente"?
Um outro caso onde a Service API é uma excelente escolha é para processamentos em background que devem iniciar a partir de um BroadcastReceiver, mesmo quando o aplicativo não está em foreground. Falo mais sobre isso na vídeo aula.
Apesar de na aula nós irmos mais nos detalhes, tem algumas informações que preciso já deixar você ciente.
Primeiro:
Se um objeto de um serviço definido já estiver em execução, a tentativa de criar um novo objeto desse serviço por meio de invocações ao método startService() vai na verdade acionar novamente o método onStartCommand() desse objeto já ativo.
Ou seja, é possível ter diferentes serviços em execução, mas cada serviço tem somente um objeto do tipo dele em execução por vez.
Segundo:
Na época da construção desta vídeo aula ainda era possível acionar um serviço por meio de configurações implícitas de intenções.
Mas a partir do Android 5, vulgo Android Lollipop (API de nível 21), esse tipo de inicialização de serviço não é mais recomendado e pior... se a inicialização implícita for utilizando um bindService() uma exceção será gerada.
Acione um Service sempre de maneira explícita (seguindo assim uma recomendação da documentação).
É possível driblar a necessidade de acionamento implícito de serviço utilizando um BroadcastReceiver para isso.
Ou seja, o BroadcastReceiver será acionado de maneira implícita e então, no onReceiver() dele, será acionado o serviço de maneira explícita.
Apesar do conteúdo da vídeo aula não ser tão atual como esperado por você, ele ainda é útil e pode ser utilizado tranquilamente nos dias de hoje.
Mas é importante informar que o Service, assim como Activity e Intent, por exemplo. Esse, o Service, é um dos conteúdos base, fundamentos, do desenvolvimento de aplicativos Android.
Sendo assim, depois de estudar esse conteúdo, não deixe de realizar alguns testes com a API e de também ao menos dar uma passada na documentação oficial.
Digo isso, pois se você não tiver entendido com propriedade os fundamentos do Android, então as partes mais avançadas serão quase que indecifráveis.
A... antes que eu me esqueça, sobre processamento em background enquanto o aplicativo não está em primeiro plano...
Execução em background com o app fora do primeiro plano
Para execuções em background enquanto o aplicativo não está em foreground eu recomendo outras APIs.
Pois apesar do Service também funcionar, ele não tem garantia alguma de que será executado nesse cenário.
Isso porque a execução de um serviço enquanto o aplicativo está fora do foreground é totalmente dependente do "humor" do sistema Android.
Logo, para execuções em background enquanto o app está fora do primeiro plano, primeiro entenda como tudo acontece:
- Limites da execução em segundo plano;
- Guia para o processamento em segundo plano;
- Otimizar para o "Soneca" e o "App em espera".
Depois utilize alguma das APIs a seguir:
- GCMNetworkManager Para Execução de Tarefas no Background Android;
- Programar tarefas com o WorkManager.
E é isso. O Service não é uma escolha inteligente para execuções em background enquanto:
- O aplicativo está em background (fora do primeiro plano, mas ainda em memória);
- O aplicativo não está nem mesmo na pilha de aplicativos em background (fora do primeiro plano e fora da memória).
E... há outras classes e entidades de serviço que preciso ao menos lhe apresentar...
Outras entidades de serviço
A seguir os outros conteúdos de serviço Android, conteúdos aqui do Blog:
- Utilizando BindService com Service no Android;
- ResultReceiver no Service Para Comunicar Activity Android;
- IntentService no Android, Entendendo e Utilizando (API de grande importância no desenvolvimento de apps Android).
É isso.
Antes de finalizar, abaixo deixo alguns links de outros conteúdos do Blog que lhe colocarão em dia com o que há de atual no mundo do desenvolvimento de aplicativos Android:
- Kotlin Android, Entendendo e Primeiro Projeto;
- Android Studio: Instalação, Configuração e Otimização;
- Android Mobile-Commerce, Apresentação e Protótipo do Projeto.
E caso você tenha como meta aprender a criar apps Android, ou evoluir nesta área, também com o conteúdo gratuito do Blog e canal, então não deixe de acessar a lista de estudos exclusiva em:
Não esqueça de se inscrever 📫na lista de e-mails do Blog para receber os conteúdos Android em primeira mão e também em formato PDF (este formato é liberado somente para os inscritos na lista de e-mails).
Se inscreva também no canal do Blog no YouTube para acompanhar as últimas novidades.
Surgindo dúvidas ou dicas, pode enviar abaixo na área de comentários que logo eu lhe respondo.
Obs. : o link para download do projeto apresentado em vídeo se encontra logo abaixo no artigo, mais precisamente na seção "Download".
Abraço.
Eclipse IDE vs Android Studio IDE
Apesar do conteúdo da vídeo aula acima estar utilizando o Eclipse IDE 😱, tudo que é apresentado, tanto a parte teórica quanto a parte prática, é ainda válido nos dias de hoje com o desenvolvimento Android utilizando o Android Studio 😁.
Ou seja, independente da linguagem oficial (Java, Kotlin, C ou C++), IDE ou framework que você esteja utilizando, o conteúdo acima é ainda de grande utilidade.
AndroidX
Apesar do conteúdo sobre Service ainda estar atual e ser de grande importância para qualquer nível de desenvolvedor Android.
Apesar disso eu também recomendo, assim que finalizado o projeto em sua própria instalação de IDE, que você o migre para o AndroidX.
Algo que pode ser feito com poucos cliques, como apresentado no tutorial a seguir: Migrar para o AndroidX.
Fontes
Documentação oficial Service Android
Comentários Facebook