Criando um Service em Android | Felipe Silveira fala sobre Android, Java e desenvolvimento de software em geral.
Bounded: são serviços iniciados através do método bindService(). Os Bound Services interagem com os outros componentes através de uma interface cliente-servidor, que inclusive podem ocorrer entre diferentes processos (IPC). Um Bound Service é executado enquanto possuir requisições a serem tratadas.
O ciclo de vida de um serviço é análogo ao de uma Activity, porém um pouco mais simples. O diagrama abaixo ilustra o fluxo de chamadas de métodos para ambos os tipos de serviço:
Muitos desenvolvedores cometem alguns erros ao implementar os serviços por conta de conceitos errados. São eles:
● Um serviço NÃO é um processo separado. Ele pode ser executado em um processo separado, mas por padrão não é.
● Um serviço NÃO é uma thread separada. Por padrão, seu código é executado na Main Thread.
Nas aulas anteriores do Curso de Desenvolvimento Android, criamos uma implementação de HttpUrlConnection que faz backup das notas inseridas pelo usuário em um servidor remoto. (Se você não estava acompanhando o curso, sugiro fazer o download do projeto aqui)
Agora, ao invés de enviar as notas através de uma AsyncTask, iremos fazê-lo através de um Service.
Para isso, crie o arquivo QuickNotesSyncService.java com o seguinte conteúdo:
package android.helloworld;
public class QuickNotesSyncService extends Service {
DataSync d = new DataSync(QuickNotesSyncService.this);
d.syncPendingNotes();
// Neste exemplo, iremos supor que o service será invocado apenas
// atraves de startService()
private class SyncDataTask extends AsyncTask<Void, Integer, Void> {
protected Void doInBackground(Void... p) {
E a chamada para o serviço será através do método startService, no método doInBackground da AddNoteAsyncTask da MainActivity, que deixará de usar a classe DataSync diretamente
private class AddNoteTask extends AsyncTask<String, Void, Uri> {
values.put(QuickNotesProvider.Notes.SYNCED, "0");
boolean isConnected = (activeNetwork != null) && activeNetwork.isConnected();
"Nota inserida com sucesso!",
Por fim, é necessário registrar o serviço no AndroidManifest:
android:label="QuickNotes" >
android:name="android.helloworld.QuickNotesSyncService" >
As principais vantagens de se usar um Service para operações como esta, de sincronização, são:
ciclo de vida mais longo: Mesmo que o usuário coloque a aplicação em background, o serviço continuará sua execução (o que não é sempre verdade no caso de AsyncTasks criadas a partir de uma Activity, por exemplo)
independência: o Service é um componente independente, desacoplado das Activities. Isso dá mais flexibilidade ao desenvolvedor, permitindo, por exemplo, que ele invoque este serviço de tempos em tempos usando um broadcast receiver, que é o assunto da nossa próxima aula.
« Acessando a rede através de HTTP
As novidades de Android 5.1 sob a perspectiva de desenvolvimento »
3 respostas to "Criando um Service em Android"
março 25, 2015 às 4:48 pm
Felipe Gostaria de saber se vc desenvolve app para empresa no ramo de prestação de serviço. Se possível entre em contato por email, tenho uma idéia é não sei se é possível. Obrigado.
Felipe uma dúvida esse serviço funciona por exemplo como o de notificações do whatsapp, mesmo eu encerrando o app o serviço continua rodando ?
Vernet disse:
julho 19, 2016 às 12:42 pm
bem, Felip adorei, porem uma perguntinha dessa forma tambem posso criar ou registar servicos de internet?