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

arrow_back Aula 13 - Services, Content Providers e Broadcast Receivers

Services

Criando um Service

Agora que já relembramos o que é um Service e para que utilizá-lo, vamos aprender a criar um. Essa criação é simples, como a de uma Activity, e não deve ser difícil de entender. Vamos ver os passos que devem ser seguidos para que tenhamos um Service funcional e que cumpra os objetivos dentro de nossa aplicação.

Assim como nas Activities, o primeiro passo na criação de um Service é estender a classe que vai implementar o serviço da classe Service, ou de alguma subclasse dela. Ao estender sua classe de Service, alguns callbacks devem ser implementados para tratar eventos do ciclo de vida do Service que você está implementando e também para prover mecanismos para que os outros componentes possam se ligar ao Service de maneira adequada.

Uma vez que a classe tenha sido criada, antes de qualquer outra coisa, deve-se adicionar ao Manifest a declaração do serviço que está sendo criado. Caso crie o Service diretamente pela IDE, isso é feito automaticamente. Caso contrário, para fazer isso, assim como nas Activities, basta declarar no Manifest uma propriedade indicando o nome do Service, da seguinte maneira:

Uma vez declarado, o Service está pronto para receber Intents explícitos. Para que ele possa receber Intents implícitos, da mesma forma das Activities, a declaração precisa conter os campos de Intent Filter. É importante notar que, caso o Service deva ser usado apenas pela sua aplicação, ele não deve conter nenhum tipo de Intent Filter. Isso evita que aplicações desconhecidas iniciem o seu Service. Caso, ainda assim, você queira garantir que o Service só seja utilizado dentro de sua aplicação, configure o atributo android:exported com o valor false. Com isso, o Android se encarregará de permitir apenas a classes de sua aplicação acessar o Service declarado.

Agora que já temos a classe criada, herdando de Service e devidamente declarada no Manifest, podemos passar a nos preocupar com os métodos que devem ser sobrescritos pelo novo Service. Veremos cada um dos métodos mais importantes e para que eles servem.

  • onCreate(): Esse método, da mesma forma das Activities, é o método chamado quando o Service é criado pela primeira vez. É nesse método que todas as inicializações necessárias devem ser feitas. Caso o serviço já esteja sendo executado quando for chamado, esse método não será chamado.
  • onDestroy(): Mais uma vez semelhante às Activities, esse método é o responsável por fazer todas as liberações e finalizações necessárias antes do encerramento de um Service. Ele é chamado antes do Service ser finalizado. É importante notar também que, similar ao que acontece com as Activities, existem casos extremos em que esse método não chega a ser executado antes da finalização do Service.
  • onStartCommand(): Esse método é um dos específicos de Services. É esse método que é responsável por iniciar um Service que tenha sido chamado pelo método startService(). Quando inicializado dessa maneira, um Service roda indefinidamente e é responsabilidade do programador chamar, em algum momento, o método stopSelf() dentro do próprio Service ou o método stopService() em algum outro componente. Se o programador não fizer isso, o Service rodará por tempo indeterminado, podendo comprometer a performance do aparelho e com isso a confiabilidade na sua aplicação. Caso prover um serviço desse tipo não seja de seu interesse, outro tipo é possível de ser implementado e isso é feito através do próximo método que veremos.
  • onBind(): Esse método é chamado pelo sistema quando um outro componente inicializa o Service que está sendo implementado pelo método bindService(). A implementação desse método deve fornecer ao usuário uma maneira de se comunicar com esse serviço. Isso normalmente é feito retornando a quem chamou uma interface chamada IBinder. Esse método precisa sempre ser implementado e, caso não vá ser utilizado, deve retornar null.

Esses quatro métodos são os métodos que devem ser sobrescritos quando se está criando um novo Service. É importante entender cada um deles e as peculiaridades envolvidas. Antes de implementar os dois últimos métodos, é de grande valia entender as diferenças entre um Service que pode ser inicializado, ou started, e um Service que pode ser atrelado, ou bound.

Versão 5.3 - Todos os Direitos reservados