A arquitetura Android possui várias "maravilhas" e facilidades que auxiliam os desenvolvedores na hora de criar aplicativos robustos e versáteis. Duas dessas "maravilhas" são as classes Service e IntentService, onde cada uma possui sua particulariedade, vantagens e metodologias de implementação.
Para tanto, é necessário saber quando devemos utilizar uma classe ou outra a fim de não fazer uma escolha errônea, afinal, quanto menos manutenção em nosso código fizermos, MENOS DOR DE CABEÇA! :-)
Para exemplificarmos melhor, trago abaixo uma pequena tabela compartiva para que vocês analisem e escolham qual classe implementar em seu projeto.
Service.class | IntentService.class | |
---|---|---|
Quando usar? | Tarefas sem conteúdos visuais (UI), mas sem excesso de tempo de execução. Caso for utilizar em longos processos, utilize em conjunto com Threads. | Geralmente, efetua longos processos sem comunicação com a UIThread. Caso seja necessário, recomendo utilizar Handlers ou Broadcast Intents. |
Como usar? | Utilizando a chamada para startService(...), bindService(...) através do método onStartCommand(...). | Utilizando Intent apenas. |
Executada a partir de qual Thread? | Qualquer Thread - com Context. | Apenas na UIThread uma vez que Intent's são utilizadas na UIThread, mas geram outras WorkerThreads. |
Funciona em qual Thread? | UIThread ou Remote (Implementando o AIDL). | Em uma WorkerThread separada. |
Desvantagens | Pode travar a UIThread, se mal implementada. | Não executa tarefas paralelas e caso seja necessário rodar múltiplas instâncias do IntentService, será gerado uma Fila - Queue - na mesma WorkerThread. |
Service.class
IntentService.class
Activity
Pense direito antes de implementar o tipo de Service que você deseja, ambos possuem suas vantagens e desvantagens!
Espero que ajude, abraço.