O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Criar um serviço de segundo plano

A classe IntentService fornece uma estrutura simples para executar uma operação em uma única linha de execução em segundo plano. Isso possibilita que ela processe 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 maior parte dos eventos do ciclo da interface do usuário. Por esse motivo, ele continua sendo executado em circunstâncias em que uma AsyncTask seria interrompida.

Um IntentService tem algumas limitações:

  • Ele não pode interagir diretamente com sua interface de usuário. Para colocar os resultados na IU, é necessário enviá-los para uma Activity.
  • As solicitações de trabalho são executadas sequencialmente. Se uma operação estiver em execução em um IntentService e você enviar outra solicitação, ela aguardará até que a primeira operação seja concluída.
  • Uma operação em execução em um IntentService não pode ser interrompida.

No entanto, na maior parte dos casos, um IntentService é a maneira preferencial de executar operações simples de segundo plano.

Este guia mostra como fazer o seguinte:

Processar intents recebidas

Para criar um componente IntentService para seu app, defina uma classe que estenda IntentService e, dentro dela, defina um método que substitua onHandleIntent(). Por 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 por IntentService. Em um IntentService, evite modificar esses callbacks.

Para saber mais sobre como criar um IntentService, consulte Extensão da classe IntentService.

Definir o serviço de intent no manifesto

Um IntentService também precisa de uma entrada no manifesto do aplicativo. Forneça essa entrada como um elemento <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.

O elemento <service> não contém um filtro de intent. A Activity que envia solicitações de trabalho para o serviço usa uma Intent explícita. Por esse motivo, nenhum filtro é necessário. Isso também significa que somente os componentes no mesmo app ou em outros aplicativos com o mesmo ID do usuário podem acessar o serviço.

Agora que você tem a classe IntentService básica, pode enviar solicitações de trabalho para ela com objetos Intent. O procedimento para construir esses objetos e enviá-los ao IntentService é descrito em Enviar solicitações de trabalho para o serviço em segundo plano.