Cursos / Informática para Internet / Dispositivos Móveis / Aula

arrow_back Aula 13 - Services, Content Providers e Broadcast Receivers

Services

Implementando um Service do tipo Started

Existem duas maneiras de se criar um Service desse tipo. A primeira delas pede que estendamos o nosso Service da classe Service, que é a classe base para todos os serviços. O problema da implementação utilizando esse método é que o Service será executado na mesma thread de quem o chamar, o que provavelmente vai gerar lentidão na aplicação e talvez até um ANR. Para evitar isso, uma nova thread deve ser lançada e todo o tratamento dela deve ser feito pelo desenvolvedor. Para facilitar esse processo, o Android fornece uma subclasse de Service chamada IntentService.

IntentService é uma subclasse que por default já roda em uma thread separada da principal e faz todo o tratamento necessário para você. Essa subclasse executa todas as requisições que chegam a ela em uma só thread, separada da thread principal e de maneira sequencial. É importante ter em mente esse comportamento antes de escolher a utilização dessa subclasse para sua aplicação. Se essa abordagem for adequada a sua aplicação, sem dúvidas é uma boa oportunidade para utilizar essa subclasse. Para que o IntentService funcione corretamente, é importante implementar o método onHandleIntent(), que será responsável por tratar as requisições que chegam. Além disso, é necessário criar um construtor que chama o super, passando o nome da thread como parâmetro. Também para essa subclasse, precisamos chamar o super em todos os outros métodos que venham a ser implementados além do onHandleIntent(). Lembre-se de que a implementação dos outros métodos não é obrigatória nessa subclasse. A Listagem 1 mostra um código simples que pode ser utilizado para criar um Service do tipo Started a partir do IntentSevice.

Listagem 1 – Declaração de um Service Started que estende de IntentService.
Fonte: Android Developers.

Como foi dito anteriormente, apenas o construtor e o método onHandleIntent() precisam ser implementados para que o Service esteja pronto para ser utilizado. O construtor deve passar ao super o nome da thread que fará o trabalho.

Em seguida, temos a implementação do método onHandleIntent(). Esse método é o responsável por executar as requisições que são feitas ao serviço. No caso do exemplo, a thread é apenas colocada para dormir por cinco segundos, para representar uma operação longa feita na thread. Perceba que o componente que chamar essa thread não ficará parado pelos cinco segundos. Perceba também que o Intent que foi utilizado para criar o Service é passado para o método para que possa ser utilizado adequadamente. Por fim, quando este método chegar ao seu fim, o IntentService se encarregará de encerrar a thread de maneira adequada. Quantas vantagens!

Versão 5.3 - Todos os Direitos reservados