Cómo comenzar a usar WorkManager

Mediante WorkManager, puedes configurar fácilmente una tarea y entregársela 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
  • Entregarle 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.

Cómo agregar WorkManager a tu proyecto de Android

Agrega la dependencia de WorkManager en Java o Kotlin a tu proyecto de Android según las instrucciones especificadas en las notas de la versión de WorkManager.

Cómo crear una tarea en segundo plano

Una tarea se define mediante 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, amplía 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()
        }
    }
    

doWork() muestra un Result que le informa a WorkManager lo siguiente:

  • Si se completó correctamente la tarea mediante Result.success()
  • Si se produjo un error mediante Result.failure()
  • Si es necesario volver a intentar ejecutar la tarea más tarde mediante Result.retry()

Configurar cómo y cuándo ejecutar la tarea

Aunque un Worker define la unidad de trabajo, una WorkRequest define cómo y cuándo se debería ejecutar el trabajo. Las tareas pueden ser únicas o periódicas. Para las WorkRequest únicas, usa OneTimeWorkRequest; para el trabajo periódico, usa PeriodicWorkRequest. Si deseas obtener más información sobre cómo programar trabajo recurrente, lee la documentación sobre trabajo recurrente.

En este caso, el ejemplo más sencillo para crear 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.

Cómo entregarle 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