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

Primeiros passos com o WorkManager

Com o WorkManager, você pode configurar e entregar uma tarefa facilmente ao sistema para que ele a execute com as condições que você especificar. Para saber se o WorkManager é a melhor solução para sua tarefa, dê uma olhada no guia de processamento em segundo plano.

Nesse guia, você aprenderá a:

  • adicionar o WorkManager ao seu projeto Android;
  • criar uma tarefa em segundo plano;
  • configurar como e quando executar a tarefa;
  • Entregar a tarefa ao sistema

Para saber mais sobre os recursos do WorkManager, por exemplo, processar trabalhos recorrentes, criar redes e cancelar trabalhos, dê uma olhada nos guias de instruções.

Adicionar o WorkManager ao seu projeto Android

Para importar a biblioteca do WorkManager para seu projeto Android, adicione as seguintes dependências ao arquivo build.gradle do app:

dependencies {
  def work_version = "2.4.0"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"
  }

Criar uma tarefa em segundo plano

Uma tarefa é definida usando a classe Worker. O método doWork() é executado de forma síncrona em uma linha de execução em segundo plano fornecida pelo WorkManager.

Para criar a tarefa em segundo plano, estenda a classe Worker e modifique o método doWork(). Por exemplo, para criar um Worker que faça upload de imagens, faça o seguinte:

Kotlin

    class UploadWorker(appContext: Context, workerParams: WorkerParameters)
        : Worker(appContext, workerParams) {

        override fun doWork(): Result {
            // Do the work here--in this case, upload the images.

            uploadImages()

            // Indicate whether the task finished successfully with the Result
            return Result.success()
        }
    }
    

Java

    public class UploadWorker extends Worker {

        public UploadWorker(
            @NonNull Context context,
            @NonNull WorkerParameters params) {
            super(context, params);
        }

        @Override
        public Result doWork() {
          // Do the work here--in this case, upload the images.

          uploadImages()

          // Indicate whether the task finished successfully with the Result
          return Result.success()
        }
    }
    

O Result retornado de doWork() informa ao WorkManager se a tarefa:

  • foi concluída com sucesso via Result.success();
  • falhou via Result.failure();
  • precisa ser repetida mais tarde por Result.retry().

Configurar como e quando executar a tarefa

Enquanto um Worker define a unidade de trabalho, um WorkRequest define como e quando o trabalho será executado. As tarefas podem ser pontuais ou periódicas. Para WorkRequests únicos, use OneTimeWorkRequest, e para trabalhos periódicos, PeriodicWorkRequest. Para ver mais informações sobre como programar trabalhos recorrentes, leia a documentação de trabalho recorrente.

Nesse caso, o exemplo mais simples para criar um WorkRequest para nosso UploadWorker é:

Kotlin

    val uploadWorkRequest = OneTimeWorkRequestBuilder<UploadWorker>()
            .build()
    

Java

    OneTimeWorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class)
            .build()
    

O WorkRequest também pode incluir informações adicionais, como as restrições sob as quais a tarefa será executada, entrada no trabalho, um atraso e política de backoff para tentar novamente o trabalho. Essas opções são explicadas mais detalhadamente no Guia de definição de WorkRequests.

Entregar a tarefa ao sistema

Depois de definir seu WorkRequest, agora é possível programá-lo com WorkManager usando o método enqueue().

Kotlin

    WorkManager.getInstance(myContext).enqueue(uploadWorkRequest)
    

Java

    WorkManager.getInstance(myContext).enqueue(uploadWorkRequest);
    

O tempo exato em que o worker será executado depende das restrições usadas nas otimizações do WorkRequest e do sistema. O WorkManager foi projetado para oferecer o melhor comportamento possível sob essas restrições.

Próximas etapas