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

arrow_back Aula 13 - Services, Content Providers e Broadcast Receivers

Services

Formas de Serviços

Existem dois tipos de Services que proveem funcionalidades diferentes ao desenvolvedor. O do tipo Started é inicializado através do método startService() e, uma vez inicializado, pode rodar indefinidamente até que alguém chame stopService() ou o próprio serviço chame o método stopSelf(). Esse Service normalmente provê ao usuário serviços que normalmente são de longa duração como, por exemplo, executar alguma operação on-line. A Activity poderia inicializar um Service, passando a ele a operação a ser executada, e deixar que o Service fizesse o trabalho, provavelmente se encerrando após a conclusão do mesmo.

Já o Service do tipo Bound é inicializado através do método bindService(), chamado em algum outro componente. Após essa chamada, o componente se conecta ao Service em questão através de uma interface do tipo IBinder e passa a poder se comunicar com este Service. A grande diferença entre esse Service e o anterior é que agora é possível que haja uma comunicação numa espécie de cliente-servidor. Esse Service, diferentemente do outro, só é inicializado e começa a executar quando há alguém conectado a ele. A partir do momento em que o último cliente desconecta, o Service é parado e fica aguardando que outro componente se conecte a ele para que possa ser reinicializado. Vejamos, na Figura 1, como é o ciclo de vida de cada tipo de Service.

Ciclo de vida de um Service (a esquerda) do tipo Started e de  outro do tipo Bound (a direita).

Perceba que não existe um callback do tipo onStop() no ciclo de vida do Service do tipo Started. Isso indica que, quando o Service for parado, seja pelo stopSelf() ou pelo stopService(), ele não terá qualquer chance de reagir a isso. O sistema apenas checará se algum cliente ainda está conectado a ele e, caso ninguém esteja, o serviço será finalizado, passando para o seu método onDestroy().

Também é preciso notar que um Service pode, sem problema algum, implementar os dois tipos disponíveis. Imagine que você tem uma aplicação de música e que, em certo momento, o usuário põe uma música para tocar. Essa música pode rodar indefinidamente em um serviço do tipo Started. Agora suponha que o usuário quer interagir com a música, voltando a uma parte que ele precisa escutar novamente, por exemplo. Para fazer isso, ele pode se conectar ao serviço pela interface de bind dele e assim o serviço terá sido tanto iniciado quanto conectado.

Um último detalhe mais técnico sobre os Services é que, diferentemente das Activities, eles não precisam, em seus callbacks, incluir uma chamada à sua superclasse. Basta implementar o método normalmente e o Android saberá o que fazer com seu Service.

Agora que já sabemos as diferenças entre os serviços e os principais métodos envolvidos, vamos ver um exemplo básico de um Service do tipo Started.

Versão 5.3 - Todos os Direitos reservados