A classe IntentService oferece uma estrutura simples para executar
uma operação em uma única linha de execução em segundo plano. Assim, ele pode lidar com operações de longa duração
sem afetar a capacidade de resposta da interface do usuário. Além disso, um
IntentService não é afetado pela maioria dos eventos de ciclo de vida da interface do usuário. Portanto,
continue sendo executada em circunstâncias que encerrariam um AsyncTask
Uma IntentService tem algumas limitações:
-
Ele não pode interagir diretamente com sua interface de usuário. Para colocar os resultados na interface do usuário,
terá que enviá-los para um
Activity. -
As solicitações de trabalho são executadas sequencialmente. Se uma operação estiver sendo executada
IntentServicee você enviar outra, a solicitação vai aguardar a primeira operação for concluída. -
Uma operação em execução em um
IntentServicenão pode ser interrompida.
No entanto, na maioria dos casos, uma IntentService é a maneira recomendada de realizar
operações simples em segundo plano.
Este guia mostra como fazer o seguinte:
- Criar sua própria subclasse de
IntentService. - Criar o
onHandleIntent()do método de callback necessário. - Definir o
IntentServiceno arquivo de manifesto.
Processar intents recebidas
Para criar um componente IntentService para seu app, defina uma classe que
estende IntentService e, dentro dele, defina um método que
substitui onHandleIntent(). Exemplo:
Kotlin
class RSSPullService : IntentService(RSSPullService::class.simpleName) override fun onHandleIntent(workIntent: Intent) { // Gets data from the incoming Intent val dataString = workIntent.dataString ... // Do work here, based on the contents of dataString ... } }
Java
public class RSSPullService extends IntentService { @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } }
Os outros callbacks de um componente Service normal, como
onStartCommand() são invocados automaticamente pela
IntentService Em um IntentService, evite
a substituição dessas chamadas de retorno.
Para saber mais sobre como criar um IntentService, consulte Estender a
IntentService.
Definir o serviço de intent no manifesto
Um IntentService também precisa de uma entrada no manifesto do aplicativo.
Forneça esta entrada como uma
<service>
que é filho do
Elemento
<application>:
<application android:icon="@drawable/icon" android:label="@string/app_name"> ... <!-- Because android:exported is set to "false", the service is only available to this app. --> <service android:name=".RSSPullService" android:exported="false"/> ... </application>
O atributo android:name especifica o nome da classe do
IntentService.
Observe que o
<service>
não contém um
filtro de intent. A
O Activity que envia solicitações de trabalho para o serviço usa uma
Intent explícito, por isso, nenhum filtro é necessário. Isso também
significa que apenas componentes do mesmo aplicativo ou em outros aplicativos com o
mesmo ID do usuário, acesse o serviço.
Agora que você tem a classe IntentService básica, pode enviar solicitações de trabalho
com objetos Intent. O procedimento para construir esses objetos
e enviá-las para seu IntentService está descrita em
Enviar solicitações de trabalho para o serviço em segundo plano.