Вы находитесь на странице: 1из 8

Programação de Dispositivos Móveis.

Aula n°9
Services e BroadCastReceivers.

Eng. Edmundo Manave


Instituto Superior de Transportes e Comunicação

1
Services e BroadCastReceivers
Services

Serviços são aplicações que executam, em geral, processos


longos em background desprovidos de interface.

Uma aplicação, por exemplo, pode requisitar a um serviço para


fazer um download ou mesmo executar uma música enquanto o
usuário interage com a interface ou mesmo sai da aplicação
host. A aplicação e o Serviço podem ainda se comunicar entre si.

Para criar um serviço é preciso declarar o nome da classe no


Manifest.
<manifest ... >
...
< application ... >
<service android: name =". ExampleService " />
...
</ application >
</ manifest >
2
Services e BroadCastReceivers
Services

O servico pode ser utilizado por qualquer aplicação através de


um Intent. Se o serviço a ser implementado for apenas util para a
aplicação que o contém, então é preciso explicitar que o serviço
é privado no Manifest.

<manifest ... >


...
< application ... >
<service android: name =". ExampleService "
android:exported =" false "
/>
...
</ application >
</ manifest >

3
Services e BroadCastReceivers
Services - Classe Service

Para criar um serviço é preciso implementar uma extensão da


classe Service e sobreescrever alguns métodos de callback.
onStartCommand() - Método que inicia um serviço
indefinidamente. O serviço apenas termina quando o método
stopSelf() é executado a partir do próprio serviço ou quando o
método stopService() é executado a partir de outra aplicação.

onBind() - Método que é chamado pelo sistema para associar o


serviço a uma aplicação. Ele deve prover uma interface de
comunicação entre ambos. Este método deve ser implementado
obrigatoriamente, se o serviço não for desenhado para suportar
Bind então o método onBind deve devolver null.

onCreate() - Método chamado pelo sistema no momento da


criação do serviço e pode ser utilizado para realizar pré
configurações.

4
Services e BroadCastReceivers
Services - Classe Service
onDestroy() - Método chamado pelo sistema quando o serviço for
destruido e pode ser utilizado para liberar recursos utilizados.
Abaixo temos uma implementação simples de um serviço.
public class ExampleService extends Service {

@Override
public void onCreate () {
// metodo executado no momento em que o servico e criado
}

@Override
public int onStartCommand ( Intent intent , int flags , int startId ) {
// execucao do servico
return START_STICKY ;
}

@Override
public IBinder onBind ( Intent intent ) {
// sem suporte a Binding
return null ;
}

@Override
public void onDestroy () {
// metodo executado no momento em que o servico e destruido
}
}
5
Services e BroadCastReceivers
Services - Classe Service

Observe que o método onStartCommand() devolve um inteiro. Este


valor indica como o sistema deve continuar o servico caso o sistema o
mate. Existem 3 valores possíveis:

START_NOT_STICKY - Não reinicia o serviço a menos que hajam


Intents a serem entregues;

START_STICKY - Reinicia o serviço mas não continua a partir do


Intent que estava em execução mas apenas para os que estavam
pendentes;

START_REDELIVER_INTENT - Reinicia o serviço retomando a


partir do Intent que estava em execução.

6
Services e BroadCastReceivers
Services - IntentService
É muito comum implementar serviços que utilizem sua própria thread para
executar as tarefas requisitadas, desta forma, o framework fornece uma extensão
da classe Service que simplifica a criação
de serviços.

public class ExampleService extends IntentService {

/*** O contrutor e obrigatorio e deve chamar o contrutor da super classe


* passando o nome da Thread worker
*/
public ExampleService () {
super (" ExampleService ");
}

/**
* Este metodo e chamado pela IntentService a partir de um worker Thread e recebe o
* Intent que iniciou o servico . Quando o metodo termina o IntentService para o
* servico .
*/
@Override
protected void onHandleIntent ( Intent intent ) {
// Implementacao da tarefa do servico
}
}

7
Services e BroadCastReceivers
Services – Iniciando um Servico

Intent intent = new Intent (this , ExampleService . class );


startService ( intent );

Вам также может понравиться