Para comenzar a usar WorkManager, primero debes importar la biblioteca a tu proyecto de Android.
Agrega las siguientes dependencias al archivo build.gradle
de tu app:
Groovy
dependencies { def work_version = "2.9.1" // (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" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Kotlin
dependencies { val work_version = "2.9.1" // (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") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
Una vez que agregues las dependencias y sincronices el proyecto de Gradle, el siguiente paso es definir una tarea para ejecutar.
Cómo definir un trabajo
Los trabajos se definen con la clase Worker
. El método doWork()
se ejecuta de forma asíncrona en un subproceso en segundo plano proporcionado por WorkManager.
Para crear un trabajo que pueda ejecutar WorkManager, 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 work 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 work finished successfully with the Result return Result.success(); } }
El Result
que muestra doWork()
le informa al servicio de WorkManager si el trabajo se ejecutó correctamente y, en caso de haber un error, si se debe reintentar o no.
Result.success()
: el trabajo se completó correctamente.Result.failure()
: no se pudo completar el trabajo.Result.retry()
: no se pudo completar el trabajo y se debe volver a intentar en otro momento según su política de reintento.
Cómo crear un objeto WorkRequest
Una vez que definas tu trabajo, debes programarlo mediante el servicio WorkManager para que se ejecute. WorkManager ofrece mucha flexibilidad para la programación de tu trabajo. Puedes programarlo para que se ejecute de forma periódica en un intervalo de tiempo o solo una vez.
Independientemente de cómo programes tu trabajo, siempre usarás un objeto WorkRequest
. Mientras que un Worker
define la unidad de trabajo, una solicitud WorkRequest
(y sus subclases) definen cómo y cuándo se debe ejecutar el trabajo. En el caso más simple, puedes usar una solicitud OneTimeWorkRequest
, como se muestra en el siguiente ejemplo.
Kotlin
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
Java
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
Cómo enviar el objeto WorkRequest al sistema
Por último, debes enviar tu WorkRequest
a WorkManager
con 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 bajo estas restricciones.
Próximos pasos
Esta guía de introducción apenas abarca lo básico. La solicitud WorkRequest
también puede incluir información adicional, como las limitaciones bajo las que se debe ejecutar el trabajo, las entradas que se le asignen, un retraso y la política de retirada para reintentar la ejecución de un trabajo. En la próxima sección, Cómo definir tus solicitudes de trabajo, obtendrás información más detallada sobre estas opciones y podrás aprender a programar trabajos únicos y recurrentes.
Recursos adicionales
Además de la documentación de guía, hay varios blogs, codelabs y muestras de código disponibles que te ayudarán a comenzar.
Ejemplos
- Sunflower, una app de demostración que muestra las prácticas recomendadas con varios componentes de arquitectura, incluido WorkManager
Codelabs
- Cómo trabajar con WorkManager (Kotlin) y (Java)
- WorkManager avanzado (Kotlin)
Blogs
- Introducción a WorkManager
- Aspectos básicos de WorkManager
- WorkManager y Kotlin
- Periodicidad de WorkManager
- Personalización de WorkManager: conceptos básicos
- Personalización de WorkManager con Dagger