Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Cómo comenzar a usar WorkManager

Con WorkManager, puedes configurar fácilmente una tarea y transferirla al sistema para que la ejecute bajo las condiciones que especifiques. Para saber si WorkManager es la solución adecuada para tu tarea, consulta la guía de procesamiento en segundo plano.

En esta guía, aprenderás a hacer lo siguiente:

  • Agregar WorkManager a tu proyecto de Android
  • Crear una tarea en segundo plano
  • Configurar cómo y cuándo ejecutar la tarea
  • Transfiere la tarea al sistema

Si deseas obtener más información sobre las funciones de WorkManager (por ejemplo, cómo administrar un trabajo recurrente, crear cadenas de trabajo o cancelar un trabajo), consulta las guías prácticas.

Agrega WorkManager a tu proyecto de Android

Para importar la biblioteca de WorkManager a tu proyecto de Android, agrega las siguientes dependencias al archivo build.gradle de tu app:

    dependencies {
      def work_version = "2.3.4"

        // (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"
      }
    

Crea una tarea en segundo plano

Una tarea se define con la clase Worker. El método doWork() se ejecuta de forma síncrona en un subproceso en segundo plano proporcionado por WorkManager.

Para crear tu tarea en segundo plano, extiende la clase Worker y anula el método doWork(). Por ejemplo, para crear un Worker que suba imágenes, puedes hacer lo siguiente:

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()
        }
    }
    

El Result que muestra doWork() le brinda a WorkManager la siguiente información sobre la tarea:

  • Si esta finalizó correctamente mediante Result.success()
  • Si se produjo un error mediante Result.failure()
  • Si debe volver a intentarse más adelante mediante de Result.retry()

Configura cómo y cuándo ejecutar la tarea

Mientras que un Worker define la unidad de trabajo, una WorkRequest define cómo y cuándo se debe ejecutar el trabajo. Las tareas pueden ser únicas o periódicas. En el caso de elementos WorkRequest únicos, usa OneTimeWorkRequest para el trabajo periódico PeriodicWorkRequest. Para obtener más información sobre la programación de trabajos recurrentes, lee la documentación relacionada.

En este caso, el ejemplo más simple para compilar una WorkRequest para UploadWorker es el siguiente:

Kotlin

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

Java

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

La WorkRequest también puede incluir información adicional, como las limitaciones bajo las que se debe ejecutar la tarea, comentarios sobre el trabajo, un retraso y la política de retirada para volver a intentar ejecutar un trabajo. Estas opciones se explican con mayor detalle en la Guía de definición del trabajo.

Transfiere la tarea al sistema

Una vez que hayas definido tu WorkRequest, puedes programarla con WorkManager mediante el método enqueue().

Kotlin

    WorkManager.getInstance(myContext).enqueue(uploadWorkRequest)
    

Java

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

La hora exacta a la que se ejecutará el trabajador depende de las limitaciones que se usen en tu WorkRequest y de las optimizaciones del sistema. WorkManager está diseñado para tener el mejor comportamiento posible bajo estas restricciones.

Próximos pasos