WorkManager
La API de WorkManager facilita la programación de tareas asíncronas diferibles que se deben ejecutar de manera confiable. Estas API te permiten crear una tarea y entregarla a WorkManager para que la ejecute cuando se cumplan las restricciones de trabajo.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
4 de septiembre de 2024 2.9.1 - - 2.10.0-alpha03

Cómo declarar dependencias

Para agregar una dependencia en WorkManager, debes agregar el repositorio Maven de Google a tu proyecto:

Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:

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

Para obtener información acerca del uso de extensiones de Kotlin, consulta la documentación de ktx.

Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 2.10

Versión 2.10.0-alpha03

4 de septiembre de 2024

Lanzamiento de androidx.work:work-*:2.10.0-alpha03. La versión 2.10.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

  • Se agregaron etiquetas de seguimiento a los objetos Job desde WorkManager, lo que hace que "adb shell dumpsys jobscheduler" sea mucho más fácil de comprender, ya que contendrá el nombre del trabajador que se está ejecutando. También se agregan secciones de registro alrededor de áreas clave de WorkManager.

Cambios en la API

  • Ahora, WorkManager 2.10.0 se compila con el SDK 35.
  • Se corrigió el tiempo de espera de los trabajadores en primer plano de tipo "short service" y "data sync", que causaban un error de ANR cuando WorkManager no llamaba a stopSelf() Esta corrección solo se aplica a dispositivos con el nivel de API 34 y 35 en los que se introdujeron tipos de servicios en primer plano. (ca06b2, b/364508145).
  • Nuevas APIs de WorkerParameters que permiten cambiar el proceso remoto al que se vincula Worker cuando se usa un WorkerFactory (Ibdc8a, Ie8a90, I7373f).

Correcciones de errores

  • Se corrigió una falla causada por WorkManager que intentaba reiniciar un trabajador de larga duración (es decir, un trabajador en primer plano) cuando el tipo de trabajo en primer plano tenía permisos previos de Android 14 revocados. (b/333957914).
  • Se quitó la descripción manual del acceso a las nuevas APIs de la plataforma, ya que esto sucede automáticamente a través del modelado de API cuando se usa R8 con AGP 7.3 o versiones posteriores (por ejemplo, R8 versión 3.3) y para todas las compilaciones cuando se usa AGP 8.1 o versiones posteriores (p. ej., D8 versión 8.1). Se recomienda a los clientes que no usan AGP que actualicen a D8 8.1 o versiones posteriores. Consulta este artículo para obtener más detalles. (Ia60e0, b/345472586).

Versión 2.10.0-alpha02

17 de abril de 2024

Lanzamiento de androidx.work:work-*:2.10.0-alpha02. La versión 2.10.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregó la capacidad de emitir intervalos de seguimiento mediante un Tracer @RestrictTo configurable en WorkManager. (I17d7f, b/260214125).
  • Se agregó Configuration.workerCoroutineContext para controlar el despachador en el que se ejecuta CoroutineWorker. Ayuda a evitar por completo el uso de Dispatchers.Default en WorkManager. (Icd1b7).
  • Se agregaron controladores de excepciones personalizados para los trabajadores. (Ib1b74, b/261190695)
  • Ahora se pueden construir OneTimeWorkRequest.Builder y PeriodicWorkRequest.Builder con KClass en lugar de Class: val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build(). (Ib55f6)
  • Se migró la clase WorkManager a Kotlin. Ahora los métodos que muestran LiveData, ListenableFuture o Flow proporcionan información de nulabilidad correcta. Podría requerir cambios en las contraseñas el código fuente, si las suposiciones de nulabilidad en ese código eran incorrectas. (If6757).

Versión 2.10.0-alpha01

24 de enero de 2024

Lanzamiento de androidx.work:work-*:2.10.0-alpha01. La versión 2.10.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Los desarrolladores pueden especificar NetworkRequest como una restricción para un trabajador a través del método Constraints.setRequiredNetworkRequest. Esto permite tener un control más detallado sobre la red que debe ejecutar este trabajador.

Cambios en la API

  • Se agregó la capacidad de especificar NetworkRequest como restricción. (Id98a1, b/280634452).

Versión 2.9

Versión 2.9.1

7 de agosto de 2024

Lanzamiento de androidx.work:work-*:2.9.1. La versión 2.9.1 contiene estas confirmaciones.

Correcciones de errores

Versión 2.9.0

29 de noviembre de 2023

Lanzamiento de androidx.work:work-*:2.9.0. La versión 2.9.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.8.0

  • Observabilidad a través de Flow-s. En lugar de LiveData, el progreso de Worker ahora se puede observar a través de Flow mediante WorkManager.getWorkInfosFlow y métodos similares.
  • Ahora WorkManager proporciona una sugerencia sobre por qué se detuvo un trabajador anteriormente. Se puede consultar desde un trabajador a través del método getStopReason() o desde WorkInfo a través de getStopReason().
  • Programación precisa de trabajadores periódicos a través de setNextScheduleTimeOverride Esto permite el cálculo dinámico del siguiente horario de trabajo periódico, que puede usarse para implementar funciones avanzadas, como tiempos de actualización adaptables, comportamiento personalizado de reintentos o hacer que un trabajador del feed de noticias se ejecute antes de que el usuario se despierte todas las mañanas sin cambios. ExistingPeriodicWorkPolicy.UPDATE debe usarse con estas técnicas para evitar cancelar un trabajador en ejecución mientras se programa el siguiente.
  • Pruebas de WorkManager con producción de coincidencias de subprocesos. Se puede usar ExecutorsMode.PRESERVE_EXECUTORS en initializeTestWorkManager para conservar los ejecutores establecidos en Configuration y usar el subproceso principal real.
  • Se movieron las APIs de corrutinas como CoroutineWorker del artefacto adicional work-runtime-ktx al entorno de ejecución de trabajo del artefacto principal. work-runtime-ktx ahora está vacío.

Cambios en la API

  • stopReason se agregó a WorkInfo. Hace que stopReason esté disponible después de que se ejecuta el trabajador. Podría ser útil en la generación de informes de stopReason de una manera utilizable, ya que una vez que se detiene un trabajador, una app en sí podría finalizarse muy rápidamente. (I21386).
  • Permite que Clock se establezca a través de la configuración y se use para controlar la secuencia de ejecución de las pruebas de Worker. (Ic586e).
  • Se agregó el método getStopReason() a ListenableWorker, que muestra una pista por qué se detuvo el trabajador. (I07060).
  • Se agregó WorkManagerTestInitHelper#closeWorkDatabase() para evitar la advertencia de Closeguard sobre recursos filtrados. (Ia8d49).
  • El constructor de WorkInfo ahora es público, lo que puede ser útil para realizar pruebas. (Ia00b6, b/209145335).
  • work-runtime-ktx ahora está vacío, CoroutineWorker y otras utilidades específicas de Kotlin ahora están disponibles en el artefacto principal del entorno de ejecución de trabajo. (I71a9a).
  • Se agregó el método setNextScheduleTimeOverride, que permite la configuración precisa de programas de trabajo periódicos. (I3b4da)
  • Se agregó getNextScheduleTimeMillis para obtener información sobre el tiempo de ejecución programado que se agregó a WorkInfo. (I797e4).
  • La información inicial sobre el retraso y la frecuencia se agrega a WorkInfo. (I52f2f).
  • Se agregó el método para observar trabajadores a través de flujos a través de los métodos getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow. (If122a)
  • Se agregaron las anotaciones de @RequiresApi(...) faltantes a Constraints y propiedades. Ahora están alineadas con las anotaciones correspondientes en los métodos set de Constraints.Builder que existían desde las primeras versiones de WorkManager. (I6d7d2).
  • WorkManager ahora tiene un límite independiente para trabajadores de URI de contenido a fin de proporcionarles ranuras garantizadas en JobScheduler para evitar que se pierdan actualizaciones de contenido con una carga alta. El límite se puede configurar a través de Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f).
  • Se agregan restricciones a WorkInfo. (I162c0).

Versión 2.9.0-rc01

18 de octubre de 2023

Lanzamiento de androidx.work:work-*:2.9.0-rc01. La versión 2.9.0-rc01 contiene estas confirmaciones.

  • No hubo cambios desde la última versión beta

Versión 2.9.0-beta01

6 de septiembre de 2023

Lanzamiento de androidx.work:work-*:2.9.0-beta01. La versión 2.9.0-beta01 contiene estas confirmaciones.

Cambios en la API

Versión 2.9.0-alpha02

26 de julio de 2023

Lanzamiento de androidx.work:work-*:2.9.0-alpha02. La versión 2.9.0-alpha02 contiene estas confirmaciones.

Nuevas funciones

  • Ahora WorkManager proporciona una sugerencia sobre por qué se detuvo un trabajador anteriormente. Se puede consultar desde un trabajador a través del método getStopReason() o desde WorkInfo a través de getStopReason().

Cambios en la API

  • stopReason se agregó a WorkInfo. Pon a disposición stopReason después de que se ejecuta el trabajador. Podría ser útil en la generación de informes de stopReason de manera fácil de usar, ya que una vez que se detiene un trabajador, una app se puede finalizar rápidamente. (I21386).
  • Permite que la app Clock se configure a través de la configuración y se use para impulsar la secuencia de ejecución de las pruebas de Worker. (Ic586e).
  • Se agregó el método getStopReason() a ListenableWorker, que muestra una pista por qué se detuvo el trabajador. (I07060).
  • Se agregó WorkManagerTestInitHelper#closeWorkDatabase() para evitar la advertencia de Closeguard sobre recursos filtrados. (Ia8d49).

Correcciones de errores

  • Se agregó la capacidad para omitir overrideNextScheduleTime con TestDriver y se corrigieron problemas relacionados con la capacidad de prueba. (Ic2905).

Versión 2.9.0-alpha01

7 de junio de 2023

Lanzamiento de androidx.work:work-*:2.9.0-alpha01. La versión 2.9.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Observabilidad a través de Flow-s. En lugar de LiveData, el progreso de Worker ahora se puede observar a través de Flow mediante WorkManager.getWorkInfosFlow y métodos similares.
  • Programación precisa de trabajadores periódicos a través de setNextScheduleTimeOverride Esto permite el cálculo dinámico del siguiente horario de trabajo periódico, que puede usarse para implementar funciones avanzadas, como tiempos de actualización adaptables, comportamiento personalizado de reintentos o hacer que un trabajador del feed de noticias se ejecute antes de que el usuario se despierte todas las mañanas sin cambios. ExistingPeriodicWorkPolicy.UPDATE debe usarse con estas técnicas para evitar cancelar un trabajador en ejecución mientras se programa el siguiente.
  • Las pruebas de WorkManager con subprocesos de coincidencia de producción Se puede usar ExecutorsMode.PRESERVE_EXECUTORS para conservar los ejecutores establecidos en Configuration y para usar el subproceso principal real.
  • Las APIs de corrutinas como CoroutineWorker se movieron del artefacto adicional work-runtime-ktx al artefacto principal work-runtime. El campo work-runtime-ktx ahora está vacío.

Cambios en la API

  • El constructor de WorkInfo ahora es público y puede ser útil para realizar pruebas. (Ia00b6, b/209145335).
  • work-runtime-ktx ahora está vacío, CoroutineWorker y otras utilidades específicas de Kotlin ahora están disponibles en el artefacto work-runtime principal. (I71a9a).
  • Se agregó el método setNextScheduleTimeOverride, que permite la configuración precisa de programas de trabajo periódicos. (I3b4da)
  • Se cambió el nombre de getEarliestRunTimeMillis a getNextScheduleTimeMillis. (I2bd7a).
  • Se agregó a WorkInfo la información del próximo tiempo de ejecución programado. (I797e4).
  • La información inicial sobre el retraso y la frecuencia se agrega a WorkInfo. (I52f2f).
  • Se agregó el método para observar trabajadores a través de flujos a través de los métodos getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow. (If122a)
  • Se agregaron las anotaciones @RequiresApi(...) faltantes a Constraints y propiedades. Ahora están alineadas con las anotaciones correspondientes en los métodos set de Constraints.Builder que existían desde las primeras versiones de WorkManager. (I6d7d2).
  • WorkManager ahora tiene un límite independiente para trabajadores de URI de contenido a fin de proporcionarles ranuras garantizadas en JobScheduler para evitar que se pierdan actualizaciones de contenido con una carga alta. El límite se puede configurar a través de Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f).
  • Se agregan restricciones a WorkInfo. (I162c0).

Versión 2.8

Versión 2.8.1

22 de marzo de 2023

Lanzamiento de androidx.work:work-*:2.8.1. La versión 2.8.1 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error de ANR en RescheduleReceiver que antes no controlaba correctamente dos transmisiones simultáneas. (b/236906724).

Versión 2.8.0

8 de febrero de 2023

Lanzamiento de androidx.work:work-*:2.8.0. La versión 2.8.0 contiene estas confirmaciones.

Cambios importantes desde 2.7.0

Nuevas funciones

Cambios en la API

  • Se agregó WorkManager.updateWork para actualizar el trabajo y preservar el tiempo de cola y el encadenamiento originales (I9a248, b/219446409).
  • Se agregó ExistingPeriodicWorkPolicy.UPDATE. Esta política permite actualizar un trabajo periódico por su nombre. Es similar a la REPLACE existente, pero es menos invasiva: no cancela a un trabajador si está en ejecución y conserva el tiempo de puesta en cola. La demora y el período iniciales se calculan a partir del tiempo de cola original en lugar de la hora de actualización de Google. REPLACE dejó de estar disponible para haya menos confusión entre los nombres REPLACE y UPDATE que son muy similares. Si aún deseas mantener la semántica anterior de REPLACE, puedes usar la CANCEL_AND_REENQUEUE recién agregada, que es idéntica a REPLACE (I985ed, b/219446409).
  • Se agregó la capacidad de interceptar excepciones de programación proporcionando Consumer<Throwable> a través de setSchedulingExceptionHandler).
  • Se agregó la capacidad de proporcionar Consumer<Throwable> a través de setInitializationExceptionHandler para determinar si hubo problemas cuando se intentó inicializar WorkManager.
  • Se trasladaron los ayudantes intercalados de OneTimeWorkRequest y PeriodicWorkRequest de androidx.work:work-runtime-ktx a androidx.work:work-runtime (I0010f, b/209145335).
  • Se agregaron los métodos auxiliares WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames y WorkQuery.fromTags para crear WorkQuery de forma directa (b/199919736) (If48f2, b/199919736).
  • Se agregó getForegroundInfo a Worker (Ic1ead).
  • RxWorker, tanto para RxJava 2 como para RxJava 3, ahora tiene setForeground que muestra Completable que se puede usar en lugar de setForegroundInfoAsync que muestra ListenableFuture.
  • RxWorker para RxJava 2 y RxJava 3 tiene getForegroundInfo que muestra Single que se puede usar en lugar de getForegroundInfoAsync que muestra ListenableFuture (b/203851459).
  • Ahora es posible crear restricciones directamente en lugar de usar Constraints.Builder, que es conveniente para los usuarios de Kotlin (Idc390, b/137568653).
  • Se agregó la capacidad de comprobar si se inicializó WorkManager. Además, se agregó una nueva API de getConfiguration() para que los desarrolladores de bibliotecas obtengan la configuración con la que se inicializó WorkManager (I6eff3, b/212300336).

Correcciones de errores

  • Se corrigió un problema con el programador expansivo que impedía que los trabajadores se ejecutaran inmediatamente cuando estaban cargados. (I9686b, b/248111307).
  • Se agregó @RequiresPermission a las APIs que requieren que se otorgue el permiso POST_NOTIFICATIONS en SDK 33 y versiones posteriores (Ie542e, b/238790278).
  • Se propagan las cancelaciones de CoroutineScope a ListenableFuture cuando se usa suspendCancellableCoroutine.

Versión 2.8.0-rc01

7 de diciembre de 2022

Lanzamiento de androidx.work:work-*:2.8.0-rc01. La versión 2.8.0-rc01 contiene estas confirmaciones.

Nuevas funciones

  • No hay funciones nuevas en este lanzamiento. Ante todo, se trata de la mejora de una versión

Versión 2.8.0-beta02

9 de noviembre de 2022

Lanzamiento de androidx.work:work-*:2.8.0-beta02. La versión 2.8.0-beta02 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió el método equals en WorkInfo, que antes no tenía en cuenta la información de la nueva generación (4977cc).

Versión 2.8.0-beta01

5 de octubre de 2022

Lanzamiento de androidx.work:work-*:2.8.0-beta01. La versión 2.8.0-beta01 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un problema con el programador expansivo que impedía que los trabajadores se ejecutaran inmediatamente cuando estaban cargados. (I9686b, b/248111307)

Versión 2.8.0-alpha04

7 de septiembre de 2022

Lanzamiento de androidx.work:work-*:2.8.0-alpha04. La versión 2.8.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron WorkerInfo.getGeneration() y WorkerParameters.getGeneration() que muestran la generación de un trabajador. Un trabajador tiene varias generaciones si se actualizó mediante WorkManager.updateWork o WorkManager.enqueueUniquePeriodicWork con ExistingPeriodicWorkPolicy.UPDATE. Ten en cuenta que, si el trabajador está en ejecución, es posible que este método muestre una generación más nueva a partir de la del trabajador en ejecución si se realizó una actualización durante la ejecución del trabajador (I665c5, b/219446409) (I128a9, b/219446409).
  • Se agregó InitializationExceptionHandler, un controlador de excepciones que se puede usar para determinar si hubo problemas cuando se intentó inicializar WorkManager (I061de).

Versión 2.8.0-alpha03

10 de agosto de 2022

Lanzamiento de androidx.work:work-*:2.8.0-alpha03. La versión 2.8.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó la capacidad de actualizar WorkRequests de forma no invasiva, lo que preserva el tiempo de cola original, el encadenamiento, etc. Consulta WorkManager.updateWork y ExistingPeriodicWorkPolicy.UPDATE para obtener más detalles.

Cambios en la API

  • Se agregó WorkManager.updateWork para actualizar el trabajo y preservar el tiempo de cola y el encadenamiento originales (I9a248, b/219446409).
  • Se agregó ExistingPeriodicWorkPolicy.UPDATE. Esta política permite actualizar un trabajo periódico por su nombre. Es similar a la REPLACE existente, pero es menos invasiva: no cancela a un trabajador si está en ejecución y conserva el tiempo de puesta en cola. La demora y el período iniciales se calculan a partir del tiempo de cola original en lugar de la hora de actualización de Google. REPLACE dejó de estar disponible para haya menos confusión entre los nombres REPLACE y UPDATE que son muy similares. Si aún deseas mantener la semántica anterior de REPLACE, puedes usar la CANCEL_AND_REENQUEUE recién agregada, que es idéntica a REPLACE (I985ed, b/219446409).
  • Agrega la capacidad de interceptar excepciones de programación mediante la definición de SchedulingExceptionHandler (I033eb).
  • Se trasladaron los ayudantes intercalados de OneTimeWorkRequest y PeriodicWorkRequest de androidx.work:work-runtime-ktx a androidx.work:work-runtime (I0010f, b/209145335).

Correcciones de errores

  • Se agregó @RequiresPermission a las APIs que requieren que se otorgue el permiso POST_NOTIFICATIONS en el SDK 33 y versiones posteriores (Ie542e, b/238790278).

Versión 2.8.0-alpha02

6 de abril de 2022

Lanzamiento de androidx.work:work-*:2.8.0-alpha02. La versión 2.8.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Ahora es posible crear restricciones directamente en lugar de usar Builder, que es conveniente para los usuarios de Kotlin (Idc390, b/137568653).
  • Se agregó la capacidad de comprobar si se inicializó WorkManager. Además, se agregó una nueva API de getConfiguration() para que los desarrolladores de bibliotecas obtengan la configuración con la que se inicializó WorkManager (I6eff3, b/212300336).

Versión 2.8.0-alpha01

12 de enero de 2022

Lanzamiento de androidx.work:work-*:2.8.0-alpha01. La versión 2.8.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron los métodos auxiliares WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames y WorkQuery.fromTags para crear WorkQuery de forma directa (If48f2, b/199919736).
  • Se agregaron métodos BuildCompat experimentales para SDKs futuros (Iafd82, b/207528937).
  • Se agregó getForegroundInfo a Worker (Ic1ead).
  • Se agregaron los métodos auxiliares WorkQuery.fromIds para crear WorkQuery de manera directa desde los ID (Ie5bdf, b/199919736).
  • RxWorker ahora tiene setForeground para mostrar Completable que se puede usar en lugar de setForegroundInfoAsync para mostrar ListenableFuture (I85156).
  • RxWorker para RxJava 2 ahora tiene getForegroundInfo para mostrar Single, que se puede usar en lugar de getForegroundInfoAsync que muestra ListenableFuture (I21c91, b/203851459).
  • RxWorker para RxJava 3 ahora tiene getForegroundInfo para mostrar Single, que se puede usar en lugar de getForegroundInfoAsync que muestra ListenableFuture (I1ca8a).
  • RxWorker ahora tiene setForeground para mostrar Completable que se puede usar en lugar de setForegroundInfoAsync para mostrar ListenableFuture (I992a3, b/203851459).

Correcciones de errores

  • Se propagan las cancelaciones de CoroutineScope a ListenableFuture cuando se usa suspendCancellableCoroutine (I77e63).

Versión 2.7

Versión 2.7.1

17 de noviembre de 2021

Se lanzó androidx.work:work-*:2.7.1. La versión 2.7.1 contiene estas confirmaciones.

Correcciones de errores

  • Las cancelaciones en CoroutineScope se propagan a ListenableFuture cuando se usa suspendCancellableCoroutine (I77e63).
  • Se arrojará una excepción al instante cuando las solicitudes de trabajo retrasadas se marquen como aceleradas (bef1762).

Versión 2.7.0

13 de octubre de 2021

Se lanzó androidx.work:work-*:2.7.0. La versión 2.7.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.6.0

  • WorkManager incorpora una nueva API de WorkRequest.Builder.setExpedited(...) para ayudar con las restricciones del servicio en primer plano en Android 12.

  • Cuando usas setExpedited(...), WorkManager delega los trabajos acelerados en JobScheduler a partir de Android 12, al mismo tiempo que brinda retrocompatibilidad con versiones anteriores de Android mediante la delegación de un servicio en primer plano.

Versión 2.7.0-rc01

29 de septiembre de 2021

Lanzamiento de androidx.work:work-*:2.7.0-rc01. La versión 2.7.0-rc01 contiene estas confirmaciones.

Esta versión es idéntica a androidx.work:work-*:2.7.0-beta01.

Versión 2.7.0-beta01

1 de septiembre de 2021

Lanzamiento de androidx.work:work-*:2.7.0-beta01. La versión 2.7.0-beta01 contiene estas confirmaciones.

Nuevas funciones

  • Reduce la contención de SQLite de varios procesos cuando se inicializa WorkManager.

Cambios en la API

  • Quita las API de @ExperimentalExpeditedWork debido a que las API de la plataforma subyacentes para Android 12 (S) son estables. (aosp/1792806)

Correcciones de errores

  • Proporciona un mejor mensaje de error para los trabajadores acelerados que no implementan getForegroundInfoAsync(). (aosp/1809376)

Versión 2.7.0-alpha05

21 de julio de 2021

Lanzamiento de androidx.work:work-*:2.7.0-alpha05. La versión 2.7.0-alpha05 contiene estas confirmaciones.

Esta versión también contiene correcciones de errores de la versión 2.6.0-beta02 de WorkManager.

Versión 2.7.0-alpha04

2 de junio de 2021

Lanzamiento de androidx.work:work-*:2.7.0-alpha04.

Esta versión también contiene los cambios de la versión 2.6.0-beta01.

Cambios en la API

  • ListenableWorker.setForegroundAsync() dejó de estar disponible.
  • Recomendamos usar la API de WorkRequest.Builder.setExpedited(...) cuando sea posible. Para respaldar mejor las situaciones en las que la app no está sujeta a restricciones de servicio en primer plano, los desarrolladores pueden usar la API de ListenableWorker.setForegroundAsync().
  • Si se llama a ListenableWorker.setForegroundAsync(), cuando la app está sujeta a restricciones de servicio en primer plano, se mostrará ForegroundServiceStartNotAllowedException.

Correcciones de errores

  • Cuando los trabajos acelerados se vuelven a programar dejan de ser acelerados. Se convierten en trabajos regulares.

Versión 2.7.0-alpha03

21 de abril de 2021

Lanzamiento de androidx.work:work-*:2.7.0-alpha03. La versión 2.7.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

Cambios en la API

Versión 2.7.0-alpha02

10 de marzo de 2021

Lanzamiento de androidx.work:work-*:2.7.0-alpha02. La versión 2.7.0-alpha02 contiene estas confirmaciones.

Correcciones de errores

  • Haz explícita la mutabilidad de PendingIntent para corregir una falla en la segmentación de Android 12. (b/180884673)

Versión 2.7.0-alpha01

18 de febrero de 2021

Lanzamiento de androidx.work:work-*:2.7.0-alpha01. La versión 2.7.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • WorkManager incorpora una nueva API de WorkRequest.Builder.setExpedited(...) para tener en cuenta las restricciones del servicio en primer plano en Android 12.

    Las aplicaciones ya no pueden lanzar un servicio en primer plano cuando están en segundo plano. Por lo tanto, para admitir mejor un trabajo de larga duración que haya estado vinculado anteriormente al ciclo de vida de un servicio en primer plano, las aplicaciones pueden marcar los elementos WorkRequest como acelerados.

    Esta API reemplaza las API de setForegroundAsync(...) y setForeground(...) que ahora son obsoletas.

    Cuando usas setExpedited(...), WorkManager delega los trabajos acelerados en JobScheduler a partir de Android 12, al mismo tiempo que brinda retrocompatibilidad con versiones anteriores de Android mediante la delegación de los servicios en primer plano.

Cambios en la API

  • Agrega compatibilidad para los elementos WorkRequest acelerados.

Versión 2.6.0

Versión 2.6.0

1 de septiembre de 2021

Lanzamiento de androidx.work:work-*:2.6.0. La versión 2.6.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.5.0

  • WorkManager ahora usa androidx.startup para inicializar WorkManager. Si usaste tools:node="remove", el elemento ContentProvider que se usaba en el pasado para inicializar WorkManager, debes hacer lo siguiente:

    <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    
    <!-- If you want to disable android.startup completely. -->
     <provider
                android:name="androidx.startup.InitializationProvider"
                android:authorities="${applicationId}.androidx-startup"
                tools:node="remove" />
    
  • Se agregó compatibilidad con trabajadores que pueden ejecutarse en todos los procesos. (Iaf200)

  • Se agregó un RemoteCoroutineWorker, una implementación de RemoteListenableWorker que puede vincularse a un proceso remoto. (I30578)

Versión 2.6.0-rc01

4 de agosto de 2021

Lanzamiento de androidx.work:work-*:2.6.0-rc01. La versión 2.6.0-rc01 contiene estas confirmaciones.

Esta versión es idéntica a androidx.work:work-*:2.6.0-beta02.

Versión 2.6.0-beta02

21 de julio de 2021

Lanzamiento de androidx.work:work-*:2.6.0-beta02. La versión 2.6.0-beta02 contiene estas confirmaciones.

Correcciones de errores

  • RemoteWorkManager ahora se desvincula de RemoteWorkManagerService correctamente, lo que permite que RemoteWorkManagerService se limpie de forma satisfactoria. aosp/1730694
  • RemoteListenableWorker ahora se desvincula de RemoteWorkerService correctamente, lo que permite que RemoteWorkerService se limpie de forma satisfactoria. aosp/1743817
  • Ahora solo se ejecuta ForceStopRunnable en el proceso principal de la app. Esta es una optimización que evita la contención de recursos para las apps que usan varios procesos. aosp/1749180, aosp/1761729

Versión 2.6.0-beta01

2 de junio de 2021

Lanzamiento de androidx.work:work-*:2.6.0-beta01. La versión 2.6.0-beta01 contiene estas confirmaciones.

Esta versión contiene algunas mejoras menores en la documentación. Esta versión es casi idéntica a 2.6.0-alpha02.

Versión 2.6.0-alpha02

21 de abril de 2021

Lanzamiento de androidx.work:work-*:2.6.0-alpha02. La versión 2.6.0-alpha02 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó compatibilidad con trabajadores que pueden ejecutarse en todos los procesos. (Iaf200)

  • Se agregó un RemoteCoroutineWorker, una implementación de RemoteListenableWorker que puede vincularse a un proceso remoto. (I30578)

Cambios en la API

  • Se agregó compatibilidad con la restricción de red TEMPORARILY_UNMETERED. (I08d5e)
  • Se agregó compatibilidad a setProgressAsync() con trabajadores de varios procesos. (Ib6d08)
  • WorkManagerInitializer ahora es público para que otros androidx.startup.Initializer puedan usarlo como dependencia. (I5ab11)

Versión 2.6.0-alpha01

24 de marzo de 2021

Lanzamiento de androidx.work:work-*:2.6.0-alpha01. La versión 2.6.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • WorkManager ahora usa androidx.startup para inicializar WorkManager. Anteriormente, lo hacía androidx.work.impl.WorkManagerInitializer. (aosp/1608813)

    Si usaste tools:node="remove", el elemento ContentProvider que se usaba en el pasado para inicializar el proceso de ciclo de vida, debes hacer lo siguiente:

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (O)

     <!-- If you want to disable android.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

Cambios en la API

  • Agrega una API de Result.getOutputData() que muestre el outputData de ListenableWorker. (Ie51e3)

Correcciones de errores

  • Se agregó una solución para un error de OEM que provoca que se muestre un SecurityException cuando se usan las API de AlarmManager. (aosp/1587518)

Versión 2.5.0

Versión 2.5.0

27 de enero de 2021

Lanzamiento de androidx.work:work-*:2.5.0. La versión 2.5.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.4.0

  • Un nuevo artefacto :work:work-multiprocess para apps que usan varios procesos. Este introduce mejoras de rendimiento mediante la unificación de la programación de solicitudes de trabajo en un proceso único.
    • Para usar work-multiprocess, define una dependencia en: implementation "androidx.work:work-multiprocess:2.5.0"
    • Designa un proceso principal mediante Configuration.Builder.setDefaultProcessName(String).
    • Cuando uses work-multiprocess, también podrás usar RemoteWorkManager para administrar tus WorkRequest. RemoteWorkManager siempre se comunica con el proceso designado. El programador en proceso también se ejecuta en el proceso designado.
  • A veces, ActivityManager no puede crear una instancia de la instancia JobService para iniciar un trabajo. Esto provoca que el trabajo subyacente se descarte de manera silenciosa debido a un error de la plataforma. WorkManager ahora garantiza que haya trabajos de respaldo para cada WorkRequest cuando se inicializa un Application mediante la conciliación de trabajos. Esto mejora la confiabilidad en la ejecución del trabajo. (b/172475041, aosp/1489577)
  • WorkManager limita el crecimiento de la base de datos mediante la reducción de la duración de búfer con el que se hace un seguimiento de WorkRequest, después de que se completa un WorkRequest. Anteriormente, la duración era de 7 días, pero se redujo a 1 día, así como la duración de keepResultsForAtLeast. (aosp/1419708)
  • El objeto TestListenableWorkerBuilder ahora admite la clase reificada que extiende ListenableWorker para facilitar las pruebas. (aosp/1443299, b/169787349)
  • El inspector de WorkManager ahora está disponible cuando usas Android Studio Arctic Fox.

Versión 2.5.0-rc01

13 de enero de 2021

Lanzamiento de androidx.work:work-*:2.5.0-rc01. La versión 2.5.0-rc01 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error en el que getWorkInfosLiveData no se invalidaba correctamente después de que las entidades se actualizaran cuando se usaba la API basada en WorkQuery. (aosp/1540566, b/173769028)
  • Se corrigió un error por el cual las transacciones de bases de datos no se marcaban como correctas en algunos casos excepcionales, lo que generaba problemas en algunos dispositivos Motorola. (aosp/1535368, b/175944460)
  • Se corrigió un error para ignorar NoSuchElementException cuando se intentaba desvincular de un proceso muerto. (aosp/1530589)
  • Se mejoró ConstraintTrackingWorker para detener un elemento ListenableWorker solo si todavía no se detuvo. (aosp/1496844, b/172946965)
  • Se actualizaron las bibliotecas androidx.work para que usen Java 8 (Ibd2f2).

Versión 2.5.0-beta02

2 de diciembre de 2020

Lanzamiento de androidx.work:work-*:2.5.0-beta02. La versión 2.5.0-beta02 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error en androidx.work:work-multiprocess, donde WorkManager bloqueaba accidentalmente el subproceso que realizaba la llamada cuando intentaba vincularse con el proceso designado. (aosp/1475538)
  • Se corrigió un error en el que no se identificaban correctamente los elementos PeriodicWorkRequest. (b/172475041, aosp/1489577)
  • Se agregó un método alternativo para un error de plataforma cuando se detiene el servicio en primer plano y se usan las API de setForeground*. (b/170924044, aosp/1489901)

Versión 2.5.0-beta01

28 de octubre de 2020

Lanzamiento de androidx.work:work-*:2.5.0-beta01. La versión 2.5.0-beta01 contiene estas confirmaciones.

Nuevas funciones

  • WorkManager limita automáticamente la cantidad de WorkRequest que puede retirar el programador en proceso. Las solicitudes se siguen ejecutando en orden de llegada. (aosp/1455228)
  • WorkManager intenta recuperar la operación cuando el almacén de datos de la aplicación se encuentra en mal estado. (aosp/1463103)

Correcciones de errores

  • Cuando se interrumpan ListenableWorker, márcalos como ENQUEUED inmediatamente para que puedan reprogramarse más adelante. (aosp/1455618, b/170273988)

Versión 2.5.0-alpha03

14 de octubre de 2020

Lanzamiento de androidx.work:work-*:2.5.0-alpha03. La versión 2.5.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • TestListenableWorkerBuilder y TestWorkerBuilder no usan tipos sin formato. (I883ad, b/169787349)

Correcciones de errores

  • Usa ApplicationInfo para determinar el nombre del proceso predeterminado de la app (b/168716641, aosp/1429950).
  • Corrige las reglas de visibilidad de RemoteWorkManager y RemoteWorkContinuation. Estas API ya no están marcadas como @Restricted. (aosp/1432091)
  • Corrige las reglas de ProGuard para :work:work-multiprocess. (aosp/1432091)
  • Mejora los ciclos de vida de las notificaciones para trabajos de larga duración vinculados a un servicio en primer plano. (b/168502234, aosp/1431331)

Versión 2.5.0-alpha02

16 de septiembre de 2020

Lanzamiento de androidx.work:work-*:2.5.0-alpha02. La versión 2.5.0-alpha02 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó una API a WorkQuery a fin de poder usar id para consultar WorkInfo. (aosp/1412372, b/157335295)
  • WorkManager permite una mejor compatibilidad con apps que usan múltiples procesos con un artefacto nuevo (androidx.work:work-multiprocess:*). Este artefacto ayuda a resolver algunos problemas que encuentran las apps de mayor tamaño, entre ellos, los siguientes:
    • Por lo general, se debe inicializar WorkManager en cada proceso de la app. Esto no es muy bueno, ya que hay una mayor contención de SQLite que, a su vez, genera otros problemas. WorkManager ahora tiene API nuevas que pueden usarse para designar un proceso principal de la app mediante Configuration#setDefaultProcessName(processName). El processName es un nombre de proceso completamente calificado que se parece a packageName:processName (p. ej., com.example:remote).
    • Un conjunto de API nuevas: de RemoteWorkManager y RemoteWorkContinuation a solicitudes de trabajo de enqueue, cancel y query. Estas API no incluyen variantes de LiveData a fin de evitar la contención de SQLite en múltiples procesos. Todas las llamadas a enqueue, cancel y query se envían a un proceso primary de la app mediante el AIDL y muestran un elemento ListenableFuture fluido. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)

Cambios en la API

  • WorkManager ahora elimina de forma más activa los elementos WorkRequest completados que no tengan dependencias incompletas. La duración del búfer cambió de 7 días a 1 día. (aosp/1419708)

Correcciones de errores

  • WorkManager ahora concilia los trabajos de forma proactiva, de modo que WorkRequest y JobScheduler están sincronizados cuando se inicializa WorkManager. (aosp/1412794, b/166292069)

Versión 2.5.0-alpha01

19 de agosto de 2020

Lanzamiento de androidx.work:work-*:2.5.0-alpha01. La versión 2.5.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Cambios en las API internas que nos permiten ofrecer mejores herramientas con WorkManager en el futuro. Mantente atento a las actualizaciones adicionales.

Correcciones de errores

  • Controla SecurityException cuando se realiza un seguimiento del estado de la red en algunos dispositivos. (aosp/1396969)

Contribución externa

Versión 2.4.0

Versión 2.4.0

22 de julio de 2020

Lanzamiento de androidx.work:work-*:2.4.0. La versión 2.4.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.3.0

  • El programador en proceso de los WorkManager ahora tiene más capacidad. Anteriormente, el Scheduler en proceso solo consideraba ejecutar trabajos no retrasados cuyas restricciones se cumplieron. Ahora, el programador en proceso realiza un seguimiento de WorkRequest que podrían ejecutarse en el futuro, incluso PeriodicWorkRequests. El Scheduler en proceso no observa los límites de programación (pero sigue estando restringido al tamaño del Executor que usa WorkManager). Esto significa que la aplicación ahora puede ejecutar muchas más WorkRequests cuando la app está en primer plano. Para administrar la ejecución en primer plano de trabajo retrasado, WorkManager también presenta un nuevo RunnableScheduler configurable. (aosp/1185778)
  • WorkManager ahora admite RxJava 3. Para usar RxJava 3, debes incluir la siguiente dependencia: implementation "androidx.work:work-rxjava3:2.4.0". (aosp/1277904)
  • Se agregó la capacidad de consultar las WorkInfo mediante WorkQuery. Esto es útil cuando los programadores quieren consultar las WorkInfo mediante una combinación de varios atributos. Para obtener más información, consulta WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) o WorkQuery.Builder.fromUniqueWorkNames(...). (aosp/1253230, b/143847546)
  • Se agregó la capacidad de solicitar información de diagnóstico de WorkManager mediante el siguiente comando:

    adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
    

    Esto proporciona mucha información útil, como la siguiente:

    • WorkRequests (solicitudes de trabajo) completadas en las últimas 24 horas.
    • WorkRequests actualmente EN EJECUCIÓN.
    • WorkRequests programadas (aosp/1235501).
  • Se agregó ExistingWorkPolicy.APPEND_OR_REPLACE, que es similar a APPEND, pero reemplaza a una cadena con requisitos previos cancelados o fallidos (b/134613984, aosp/1199640).

  • Se proporcionó la capacidad de agregar un RunnableScheduler personalizado para realizar un seguimiento de WorkRequests que se deben ejecutar en el futuro. El programador en proceso utiliza esta capacidad. (aosp/1203944)

  • Se agregó compatibilidad para incluir fábricas de forma dinámica a fin de delegarlas cuando se use un objeto DelegatingWorkerFactory (b/156289105, aosp/1309745).

  • Se alineó, de manera más estrecha, el seguimiento para las restricciones del objeto BATTERY_NOT_LOW con la plataforma (aosp/1312583).

  • El programador en proceso ahora usa mejores API para determinar el nombre del proceso. Esto es útil para mejorar la compatibilidad con las apps que usan varios procesos (aosp/1324732).

  • Nuevas reglas de Lint que aplican lo siguiente:

    • Uso de foregroundServiceType correcto al utilizar las API de setForegroundAsync() (b/147873061, aosp/1215915).
    • Especificación de los ID de JobScheduler que WorkManager debe usar cuando se utilizan las API de JobService directamente (aosp/1223567).
    • Se agregó una nueva regla de lint que garantiza que las implementaciones de ListenableWorker ahora sean public cuando se usa el WorkerFactory predeterminado (aosp/1291262).
  • Las llamadas a setForegroundAsync() que no se completen antes de completar un ListenableWorker se señalizarán mediante un IllegalStateException en la devolución de ListenableFuture (aosp/1262743).

  • Se corrigió un error por el que el objeto ForegroundService no se detenía después de interrumpir un elemento Worker en primer plano (b/155579898, aosp/1302153).

  • Se corrigió un error por el que el objeto WorkManager intenta ejecutar varias instancias de un elemento Worker vinculado a un servicio en primer plano (b/156310133, aosp/1309853).

Versión 2.4.0-rc01

24 de junio de 2020

Lanzamiento de androidx.work:work-*:2.4.0-rc01. La versión 2.4.0-rc01 contiene estas confirmaciones.

Correcciones de errores

  • El programador en proceso ahora usa mejores API para determinar el nombre del proceso. Esto es útil para mejorar la compatibilidad con las apps que usan varios procesos (aosp/1324732).

Versión 2.4.0-beta01

20 de mayo de 2020

Lanzamiento de androidx.work:work-gcm:2.4.0-beta01, androidx.work:work-runtime:2.4.0-beta01, androidx.work:work-runtime-ktx:2.4.0-beta01, androidx.work:work-rxjava2:2.4.0-beta01 y androidx.work:work-testing:2.4.0-beta01. La versión 2.4.0-beta01 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error por el que el objeto ForegroundService no se detenía después de interrumpir un elemento Worker en primer plano (b/155579898, aosp/1302153).
  • Se corrigió un error por el que el objeto WorkManager intenta ejecutar varias instancias de un elemento Worker vinculado a un servicio en primer plano (b/156310133, aosp/1309853).
  • Se agregó compatibilidad para incluir fábricas de forma dinámica a fin de delegarlas cuando se use un objeto DelegatingWorkerFactory (b/156289105, aosp/1309745).
  • Se alineó, de manera más estrecha, el seguimiento para las restricciones del objeto BATTERY_NOT_LOW con la plataforma (aosp/1312583).

Versión 2.4.0-alpha03

29 de abril de 2020

Lanzamiento de androidx.work:work-*:2.4.0-alpha03. La versión 2.4.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

  • WorkManager ahora admite RxJava 3. Para usar RxJava 3, debes incluir la siguiente dependencia: implementation "androidx.work:work-rxjava3:2.4.0-alpha03". (aosp/1277904)
  • Se agregó una nueva regla de lint que garantiza que las implementaciones de ListenableWorker ahora sean public cuando se usa el WorkerFactory predeterminado (aosp/1291262).

Cambios en la API

  • Llamar a setProgressAsync() después de que un ListenableWorker haya finalizado la ejecución indicará una Exception a través de ListenableFuture (aosp/1285494).
  • WorkQuery.Builder ahora está marcado como final (aosp/1275037).
  • Se cambió el nombre de los métodos de fábrica withStates, withTags y withUniqueWorkNames de WorkQuery.Builder por fromStates, fromTags y fromUniqueWorkNames, respectivamente. (aosp/1280287)

Correcciones de errores

  • Se debe ignorar SecurityException cuando se realiza el seguimiento del estado de la red de un dispositivo. (b/153246136, aosp/1280813)

Versión 2.4.0-alpha02

1 de abril de 2020

Lanzamiento de androidx.work:work-*:2.4.0-alpha02. La versión 2.4.0-alpha02 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó una nueva regla de Lint que advierte cuando las WorkRequest requieren Constraints.setRequiresCharging(...) y Constraints.setRequiresDeviceIdle(...). Algunos dispositivos nunca están inactivos y cargándose al mismo tiempo. Por lo tanto, estas solicitudes se ejecutarían con menos frecuencia de la esperada. (aosp/1253840)

Cambios en la API

  • Se agregó la capacidad de consultar las WorkInfo mediante WorkQuery. Esto es útil cuando los programadores quieren consultar las WorkInfo mediante una combinación de varios atributos. Para obtener más información, consulta WorkQuery.Builder withStates(...), WorkQuery.Builder withTags(...) o WorkQuery.Builder withUniqueWorkNames(...). (aosp/1253230, b/143847546)

  • Las llamadas a setForegroundAsync() que no se completen antes de completar un ListenableWorker se señalizarán mediante un IllegalStateException en la devolución de ListenableFuture (aosp/1262743).

Correcciones de errores

  • Se corrigió la regla de lint que busca duraciones de intervalos no válidas para las PeriodicWorkRequest. (aosp/1254846, b/152606442)

Versión 2.4.0-alpha01

4 de marzo de 2020

Lanzamiento de androidx.work:work-*:2.4.0-alpha01. La versión 2.4.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • El programador en proceso de los WorkManager ahora tiene más capacidad. Anteriormente, el programador en proceso solo consideraba ejecutar trabajos no retrasados cuyas restricciones se cumplieron. Ahora, el programador en proceso realiza un seguimiento de las WorkRequest que se podrían ejecutar en el futuro, incluidas las PeriodicWorkRequest. Asimismo, el programador en proceso no observa los límites de programación (pero sigue estando restringido al tamaño de Executor que usa WorkManager). Esto significa que la aplicación ahora puede ejecutar muchas más WorkRequest cuando la app está en primer plano. (aosp/1185778)

  • Se agregó la capacidad de solicitar información de diagnóstico de WorkManager mediante adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>". Esto proporciona mucha información útil, como la siguiente:

    • WorkRequests (solicitudes de trabajo) completadas en las últimas 24 horas.
    • WorkRequests actualmente EN EJECUCIÓN.
    • WorkRequests programadas (aosp/1235501).
  • Nuevas reglas de Lint que aplican lo siguiente:

    • Uso de foregroundServiceType correcto al utilizar las API de setForegroundAsync() (b/147873061, aosp/1215915).
    • Especificación de los ID de JobScheduler que debería usar WorkManager al utilizar las API de JobService directamente. (aosp/1223567)

Cambios en la API

  • Se agregó ExistingWorkPolicy.APPEND_OR_REPLACE, que es similar a APPEND, pero reemplaza a una cadena con requisitos previos cancelados o fallidos (b/134613984, aosp/1199640).

  • Se proporcionó la capacidad de agregar un RunnableScheduler personalizado para realizar un seguimiento de las WorkRequest que se deben ejecutar en el futuro. El programador en proceso utiliza esta capacidad. (aosp/1203944)

Correcciones de errores

  • setProgress() dejó de estar disponible en RxWorker porque antes mostraba Single<Void>, un tipo imposible. Se agregó una nueva API de setCompletableProgress(), que muestra Completable en su lugar; y se agregaron nuevas reglas de lint que ayudan a migrar a las nuevas API. (b/150080946, aosp/1242665)

Versión 2.3.4

Versión 2.3.4

18 de marzo de 2020

Lanzamiento de androidx.work:work-*:2.3.4. La versión 2.3.4 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error que causaba que se ejecutaran varias instancias de Worker de larga duración después de exceder el período de ejecución de 10 minutos (aosp/1247484, b/150553353).
  • Solución de IssueRegistry de lint para WorkManager. Gracias a @ZacSweers de Slack por la contribución. (aosp/1217923)

Versión 2.3.3

Versión 2.3.3

4 de marzo de 2020

Lanzamiento de androidx.work:work-*:2.3.3. La versión 2.3.3 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error en el que, si se interrumpía Worker, no se reprogramaba correctamente. (b/150325687, aosp/1246571)

Versión 2.3.2

Versión 2.3.2

19 de febrero de 2020

Lanzamiento de androidx.work:work-*:2.3.2. La versión 2.3.2 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error en el que WorkManager supera el límite de 100 trabajos en JobScheduler en casos excepcionales (aosp/1226859, b/149092520).
  • Se corrigió una condición de carrera en ConstraintControllers (aosp/1220100).
  • Se mejoró el ciclo de vida del servicio de administración en primer plano para los Worker de larga duración (aosp/1226295).
  • Se mejoró la administración de la cancelación de notificaciones para los Worker de larga duración en caso de cancelación. (aosp/1228346)

Versión 2.3.1

Versión 2.3.1

5 de febrero de 2020

Lanzamiento de androidx.work:work-*:2.3.1. La versión 2.3.1 contiene estas confirmaciones.

Correcciones de errores

  • Se mejoró la administración del ciclo de vida de Notification para los Worker de larga duración que se ejecutan cuando se encuentra activo un Service en primer plano (aosp/1218539, b/147249312).
  • WorkManager ahora depende de una forma estable de androidx.sqlite:sqlite-framework:2.1.0 (aosp/1217729).
  • Se agregaron reglas de lint para garantizar que se especifique un foregroundServiceType en AndroidManifest.xml cuando se usan los foregroundServiceType en ForegroundInfo. (aosp/1214207, b/147873061)

Versión 2.3.0

Versión 2.3.0

22 de enero de 2020

Lanzamiento de androidx.work:work-*:2.3.0 sin cambios desde 2.3.0-rc01. La versión 2.3.0 contiene estas confirmaciones.

Cambios importantes desde la versión 2.2.0

  • Se agregó compatibilidad para trabajos de ejecución prolongada o importantes a través de ListenableWorker#setForegroundAsync().
  • Se agregó compatibilidad para el progreso de un trabajador mediante ListenableWorker#setProgressAsync().
  • WorkManager ahora empaqueta reglas adicionales de lint como parte de la biblioteca, lo que ayuda a detectar errores con anticipación.

Versión 2.3.0-rc01

8 de enero de 2020

Lanzamiento de androidx.work:work-*:2.3.0-rc01. La versión 2.3.0-rc01 contiene estas confirmaciones.

Esta versión es idéntica a la 2.3.0-beta02.

Correcciones de errores

  • El artefacto work-testing ahora define una dependencia de api en work-runtime-ktx. (aosp/1194410)

Versión 2.3.0-beta02

18 de diciembre de 2019

Lanzamiento de androidx.work:work-*:2.3.0-beta02. La versión 2.3.0-beta02 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó un mensaje de error más claro para las excepciones de SQLite que no se pueden recuperar (aosp/1185777).
  • Se agregó una regla de lint que garantiza que se quite el proveedor de contenido androidx.work.impl.WorkManagerInitializer de AndroidManifest.xml cuando se usa la inicialización a pedido (aosp/1167007).
  • Se agregó una advertencia de lint cuando se usa enqueue() para una PeriodicWorkRequest en lugar de enqueueUniquePeriodicWork(). (aosp/1166032)

Cambios en la API

  • ForegroundInfo ahora requiere que se especifique el notificationId que se usará cuando utilices ListenableWorker.setForegroundAsync(). Este es un cambio rotundo. De este modo, puedes ejecutar varios Worker de ejecución prolongada en paralelo. WorkManager también administra mejor la duración de las Notification proporcionadas. (b/145473554, aosp/1181208, asop/1181216, asop/1183577)

Correcciones de errores

  • Se corrigió un error en la implementación de AlarmManager en el que no se borraban correctamente las alarmas (aosp/1156444).
  • Se corrigió un error en el que una lista vacía de WorkRequest provocaba la compilación de una cadena WorkContinuation incorrecta. (b/142835274, aosp/1157051)

Cambios de dependencia

  • WorkManager ahora usa Room 2.2.2.

Versión 2.3.0-beta01

20 de noviembre de 2019

Lanzamiento de androidx.work:work-*:2.3.0-beta01. La versión 2.3.0-beta01 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó una nueva regla de lint que evita errores de desarrollador debido a la implementación incorrecta de androidx.work.Configuration.Provider cuando se usa la inicialización a pedido (aosp/1164559).

Versión 2.3.0-alpha03

23 de octubre de 2019

Lanzamiento de androidx.work:work-*:2.3.0-alpha03. La versión 2.3.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó una API de WorkManager.createCancelPendingIntent() que facilita la cancelación de WorkRequest sin tener que registrar otro componente en AndroidManifest.xml. Esta API hace que cancelar WorkRequest desde Notification sea especialmente fácil. Esperamos que esto se sincronice con las nuevas API de primer plano en 2.3.0.
  • WorkManager ahora depende de androidx.room:*:2.2.0 estable.

Cambios en la API

  • Se cambió el nombre de ForegroundInfo.getNotificationType() por ForegroundInfo.getForegroundServiceType() para que sea más coherente con las API de la plataforma subyacente (b/142729893, aosp/1143316).

Correcciones de errores

  • Se corrigió un error que causaba una llamada innecesaria a setTransactionSuccessful() fuera de una transacción. Esto sucede para las migraciones poco frecuentes (b/142580433, aosp/1141737).

Versión 2.3.0-alpha02

9 de octubre de 2019

Lanzamiento de androidx.work:work-*:2.3.0-alpha02. La versión 2.3.0-alpha02 contiene estas confirmaciones.

Nuevas funciones

  • WorkManager ahora admite ejecuciones de larga duración o trabajos importantes que el SO debe mantener activos. Para obtener más información, consulta ListenableWorker#setForegroundAsync() (o CoroutineWorker#setForeground(), para Kotlin) (aosp/1133636).

Cambios en la API

  • El nombre de la API de containsKey en Data se cambia por hasKeyWithValueOfType. También se cambió el nombre del método de extensión correspondiente en la biblioteca ktx (b/141916545).

Correcciones de errores

  • La agenda de WorkManager funciona bastante bien cuando la cantidad de WorkRequest en cola se acerca a los límites de la agenda (aosp/1105766).
  • WorkManager llama a ListenableWorker#onStopped() solo si el trabajo aún no se completó (b/140055777).
  • WorkManager ahora elimina la información de progreso cuando se interrumpe a un trabajador o alcanza su estado terminal (aosp/1114572).
  • Data ahora tiene una representación toString() mucho más útil (b/140945323).
  • Data ahora tiene un mejor método equals(). También es admite deepEquals para los tipos Array (b/140922528).
  • WorkManager ahora almacena su base de datos interna y los archivos de preferencias en un directorio sin copia de seguridad (b/114808216).

Versión 2.3.0-alpha01

22 de agosto de 2019

Lanzamiento de androidx.work:work-*:2.3.September 5, 20190-alpha01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Nuevas funciones

  • ListenableWorker ahora pueden establecer el progreso por medio de la API setProgressAsync(). También se agregó una API suspend de setProgress correspondiente en CoroutineWorker y un setProgress en RxWorker que muestra un Single<Void>. Con estas nuevas API, los trabajadores pueden transmitir información de progreso por medio de WorkInfo, que tiene una API getProgress correspondiente (b/79481554).
  • Data tiene una API containsKey() que se puede usar para validar que los datos de entrada en Worker tengan claves del tipo esperado (b/117136838).
  • Data ahora se puede serializar con Data.toByteArray() y Data.fromByteArray(). Ten en cuenta que no hay ninguna garantía para el control de versiones con Data, por lo que no tienes que mantenerlo ni utilizarlo para IPC entre aplicaciones. Solo se pueden usar con seguridad entre múltiples procesos de la misma aplicación.
  • Se agregó la capacidad de especificar un InputMergerFactory por medio de Configuration.setInputMergerFactory (b/133273159).

Cambios en la API

  • WorkManager lanzará una instancia de IllegalStateException si un WorkerFactory muestra una instancia de ListenableWorker que se invocó anteriormente (b/139554406).
  • La documentación se actualiza en torno a la cancelación de ListenableFuture y la devolución de llamada de onStopped() en ListenableWorker (b/138413671).

Correcciones de errores

  • El programador en proceso ahora omite WorkRequest con la restricción idle. Ahora solo JobScheduler recoge estas solicitudes cuando el dispositivo en realidad está idle (aosp/1089779).
  • TestScheduler ahora usa correctamente el Executor especificado para su ejecutor de tareas interno en las pruebas (aosp/1090749).

Versión 2.2.0

Versión 2.2.0

15 de agosto de 2019

Lanzamiento de androidx.work:work-*:2.2.0. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Esta versión es idéntica a androidx.work:work-*:2.2.0-rc01.

Cambios importantes en la versión 2.2.0 con respecto a la versión 2.1.0

androidx.work:work-gcm:2.2.0 es un nuevo artefacto de Maven que admite el uso de GCMNetworkManager como programador cuando los Servicios de Google Play están disponibles para API nivel 22 o superiores. Se trata de una dependencia opcional que brinda un procesamiento en segundo plano mejorado y más confiable en versiones de API anteriores. Si tu app usa los Servicios de Google Play, agrega esta dependencia al archivo de Gradle para obtener automáticamente compatibilidad con GCMNetworkManager. Si los Servicios de Google Play no están disponibles, WorkManager continuará recurriendo a AlarmManager en dispositivos anteriores.

Versión 2.2.0-rc01

30 de julio de 2019

Lanzamiento de androidx.work:work-*:2.2.0-rc01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • Se corrigió un error en la implementación de AlarmManager que causaba el cierre prematuro del servicio y que, en casos excepcionales, producía una RejectedExecutionException (aosp/1092374) (b/138238197).
  • Se agregó un método alternativo para NullPointerException cuando se usan las API JobScheduler en algunos dispositivos (aosp/1091020) (b/138364061), (b/138441699).

Versión 2.2.0-beta02

19 de julio de 2019

Lanzamiento de androidx.work:work-*:2.2.0-beta02. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • Se quitó una dependencia no intencional de JaCoCo que se introdujo en 2.2.0-beta01.

Versión 2.2.0-beta01

17 de julio de 2019

Lanzamiento de androidx.work:work-*:2.2.0-beta01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Nuevas funciones

  • androidx.work:work-gcm:2.2.0-beta01 es un nuevo artefacto de Maven que admite el uso de GCMNetworkManager como programador cuando los Servicios de Google Play están disponibles para API nivel 22 o superiores. Se trata de una dependencia opcional que brinda un procesamiento en segundo plano mejorado y más confiable en versiones de API anteriores. Si tu app usa los Servicios de Google Play, agrega esta dependencia al archivo de Gradle para obtener automáticamente compatibilidad con GCMNetworkManager. Si los Servicios de Google Play no están disponibles, WorkManager continuará recurriendo a AlarmManager en dispositivos anteriores.

Correcciones de errores

  • Se implementó una corrección en IllegalArgumentException cuando se realiza el seguimiento del estado de la red en tablets Nvidia Shield K1. (aosp/1010188)

Versión 2.1.0

Versión 2.1.0

11 de julio de 2019

Lanzamiento de androidx.work:work-*:2.1.0. Esta versión es idéntica a androidx.work:work-*:2.1.0-rc01.

Cambios importantes desde la versión 2.0.1

  • work-runtime-ktx ahora requiere Java 8. Si te encuentras con algún error, puedes agregar lo siguiente a tu build.gradle: kotlinOptions { jvmTarget = "1.8" }
  • Se agregó la inicialización a pedido para WorkManager, con la que se creará WorkManager solo cuando se haga referencia a este (b/127497100). Si quieres configurar tu proyecto para la inicialización a pedido, haz lo siguiente:
    1. Inhabilita el inicializador automático.
    2. Implementa Configuration.Provider en tu objeto Application personalizado.
    3. Cambia todas las referencias de WorkManager.getInstance() a WorkManager.getInstance(Context). Como parte de este cambio, se dio de baja WorkManager.getInstance(). Siempre es más seguro llamar al nuevo reemplazo de WorkManager.getInstance(Context), incluso si no estás realizando la inicialización a pedido.
  • PeriodicWorkRequest ahora admite retrasos iniciales. Puedes usar el método setInitialDelay en PeriodicWorkRequest.Builder para establecer un retraso inicial (b/111404867).
  • Se agregó la capacidad de delegar a una o más WorkerFactory registradas mediante DelegatingWorkerFactory. (b/131435993).
  • Se agregó la capacidad de personalizar el Executor que usa WorkManager para todo el mantenimiento de registros interno a través de Configuration.Builder.setTaskExecutor.
  • Se agregó la capacidad de crear clases Worker y ListenableWorker comprobables por unidad mediante TestWorkerBuilder y TestListenableWorkerBuilder en el artefacto work-testing.
    • Ten en cuenta que work-testing ahora solicita a Kotlin como una dependencia e incluye varias extensiones de Kotlin de forma predeterminada.
  • Se agregó el número de intentos de ejecución a WorkInfo (b/127290461).
  • Ahora, los tipos de Data pueden almacenar y recuperar bytes y arreglos de bytes. Esto NO cambia el tamaño máximo de los objetos de Data.
  • WorkManager ahora depende de Room 2.1.0, por lo que se deberían solucionar algunos problemas relacionados con la base de datos.

Versión 2.1.0-rc01

27 de junio de 2019

Lanzamiento de androidx.work:work-*:2.1.0-rc01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • Se corrigió un error que hacía que una app fallara al ejecutar trabajos con JobScheduler mientras se creaba una copia de seguridad (b/135858602).

Versión 2.1.0-beta02

20 de junio de 2019

Lanzamiento de androidx.work:work-*:2.1.0-beta02. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • Ahora, TestListenableWorkerBuilder usa el WorkerFactory correcto al crear instancias de ListenableWorker (b/135275844).
  • Se corrigió un error que producía desvíos en las ventanas de ejecución para WorkRequest debido al cierre del proceso (b/135272196).

Versión 2.1.0-beta01

13 junio de 2019

Lanzamiento de androidx.work:work-*:2.1.0-beta01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • WorkManager ahora depende de Room 2.1.0, por lo que se deberían solucionar algunos problemas relacionados con la base de datos.
  • Se quitaron algunas E/S del disco de inicio en el subproceso principal.
  • Se corrigió un posible interbloqueo en el seguimiento de restricciones (b/134361006).
  • Se cancelaron por adelantado los trabajos no válidos atribuidos a WorkManager (b/134058261).
  • Se agregaron algunas llamadas defensivas a las API de JobScheduler para dispositivos que funcionan mal.

Versión 2.1.0-alpha03

5 de junio de 2019

Lanzamiento de androidx.work:*:2.1.0-alpha03.

Correcciones de errores

  • Documentación mejorada para PeriodicWorkRequest.
  • Ahora, WorkManagerTestInitHelper usa el ejecutor en segundo plano correcto para las pruebas.
  • Soluciones para problemas relacionados con SQLite cuando se realizan transacciones grandes en algunos dispositivos (b/130182503).
  • Las dependencias de WorkManager ahora son más granulares (b/133169148).
  • Errores específicos de OEM relacionados con Workaround en la implementación de JobScheduler al programar trabajos con WorkManager.
  • Mejoras en el programador basado en AlarmManager relacionadas con la duración del servicio, que causaba fallas inusuales (b/133313734).

Versión 2.1.0-alpha02

16 de mayo de 2019

Lanzamiento de WorkManager 2.1.0-alpha02. Esta versión contiene varias API nuevas.

Cambios en la API

  • PeriodicWorkRequest ahora admite retrasos iniciales. Puedes usar el método setInitialDelay en PeriodicWorkRequest.Builder para establecer un retraso inicial (b/111404867).

  • Se agregó la capacidad de delegar a una o más WorkerFactory registradas mediante DelegatingWorkerFactory. (b/131435993).

  • Se agregó la capacidad de personalizar el Executor que usa WorkManager para todo el mantenimiento de registros interno a través de Configuration.Builder.setTaskExecutor.

  • Se amplió la documentación sobre WorkRequest.keepResultsForAtLeast (b/130638001), la inicialización a pedido y PeriodicWorkRequest.Builder (b/131711394).

Versión 2.1.0-alpha01

24 de abril de 2019

Lanzamiento de WorkManager 2.1.0-alpha01. Esta versión contiene varias API nuevas. Ten en cuenta que, a partir de esta versión, habrá nuevas funciones que no contarán con portabilidad a la versión anterior 1.x. Te recomendamos cambiar a la versión 2.x.

Cambios en la API

  • Se agregó la inicialización a pedido para WorkManager, con la que se creará WorkManager solo cuando se haga referencia a este (b/127497100). Si quieres configurar tu proyecto para la inicialización a pedido, haz lo siguiente:
    1. Inhabilita el inicializador automático.
    2. Implementa Configuration.Provider en tu objeto Application personalizado.
    3. Cambia todas las referencias de WorkManager.getInstance() a WorkManager.getInstance(Context). Como parte de este cambio, se dio de baja WorkManager.getInstance(). Siempre es más seguro llamar al nuevo reemplazo de WorkManager.getInstance(Context), incluso si no estás realizando la inicialización a pedido.
  • Se agregó la capacidad de crear clases Worker y ListenableWorker comprobables por unidad mediante TestWorkerBuilder y TestListenableWorkerBuilder en el artefacto work-testing.
    • Ten en cuenta que work-testing ahora solicita a Kotlin como una dependencia e incluye varias extensiones de Kotlin de forma predeterminada.
  • Se agregó el número de intentos de ejecución a WorkInfo (b/127290461).
  • Ahora, los tipos de Data pueden almacenar y recuperar bytes y arreglos de bytes. Esto NO cambia el tamaño máximo de los objetos de Data.
  • Se dio de baja CoroutineWorker.coroutineContext. Este campo se escribió incorrectamente como CoroutineDispatcher; ya no deberías necesitarlo, debido a que puedes ir tú mismo a la corrutina Context deseada en el cuerpo de la función de suspensión.
  • RxWorker.createWork() y RxWorker.getBackgroundScheduler() ahora tienen anotan como tipos de datos que se muestran con @NonNull.

Versión 2.0.1

Versión 2.0.1

9 de abril de 2019

Lanzamiento de WorkManager 2.0.1. Esta versión es idéntica a 2.0.1-rc01.

Versión 2.0.1-rc01

3 de abril de 2019

Lanzamiento de WorkManager 2.0.1-rc01. Esta versión incluye algunas correcciones de errores. Para los usuarios heredados de la versión 1.x, algunos de estos cambios también aparecen en la versión 1.0.1-rc01.

Correcciones de errores

  • Las pruebas de Robolectric ahora funcionan correctamente con WorkManager (b/122553577).
  • Se corrigió una falla de caso límite en la que el seguimiento de restricciones no se borraba en las API anteriores a JobScheduler (b/129226383).
  • Se corrigió un error de StackOverflowError relacionado con cadenas de trabajo largas (b/129091233).
  • Se actualizó la documentación de PeriodicWorkRequest para indicar que la API nivel 23 no admite el horario flexible.
  • Se corrigieron algunos vínculos rotos en la documentación de Kotlin.

Versión 2.0.0

Versión 2.0.0

20 de marzo de 2019

Lanzamiento de WorkManager 2.0.0. Esta versión es idéntica a 2.0.0-rc01 y es la versión estable de AndroidX 1.0.0 con dependencias de AndroidX. Recomendamos la orientación a esta versión, en lugar de a las versiones 1.x heredadas. Todo el desarrollo activo se orientará a 2.x, mientras que en 1.x solo se aplicarán correcciones de errores críticos por un tiempo limitado.

Versión 2.0.0-rc01

7 de marzo de 2019

Lanzamiento de WorkManager 2.0.0-rc01. Esta versión es idéntica a la versión 1.0.0 estable, pero tiene dependencias de AndroidX. Una vez que se alcance la versión 2.0.0 estable, deberás incluir esta versión, mientras que en las versiones 1.x heredadas solo se aplicarán algunas correcciones de errores críticos. Todo el desarrollo activo se orientará a la versión 2.x.

Dependencias anteriores a AndroidX

Para obtener información acerca del uso de extensiones de Kotlin, consulta la documentación de ktx.
Documentos de referencia: Java

Groovy

dependencies {
    def work_version = "1.0.1"

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

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

    // optional - RxJava2 support
    implementation "android.arch.work:work-rxjava2:$work_version"
    // optional - Test helpers
    androidTestImplementation "android.arch.work:work-testing:$work_version"
}

Kotlin

dependencies {
    val work_version = "1.0.1"

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

    // Kotlin + coroutines
    implementation("android.arch.work:work-runtime-ktx:$work_version")

    // optional - RxJava2 support
    implementation("android.arch.work:work-rxjava2:$work_version")

    // optional - Test helpers
    androidTestImplementation("android.arch.work:work-testing:$work_version")
}

Versión 1.0.1

Versión 1.0.1

9 de abril de 2019

Lanzamiento de WorkManager 1.0.1. Esta versión es idéntica a 1.0.1-rc01.

Recomendamos encarecidamente a los usuarios actualizar a WorkManager 2.x, ya que, de aquí en adelante, habrá muy pocas actualizaciones de la rama 1.x. Tampoco se lanzarán nuevas API para la biblioteca de 1.x.

Versión 1.0.1-rc01

2 de abril de 2019

Lanzamiento de WorkManager 1.0.1-rc01. Esta versión incluye algunas correcciones de errores.

Correcciones de errores

  • Las pruebas de Robolectric ahora funcionan correctamente con WorkManager (b/122553577).
  • Se corrigió una falla de caso límite en la que el seguimiento de restricciones no se borraba en las API anteriores a JobScheduler (b/129226383).
  • Se corrigió un error de StackOverflowError relacionado con cadenas de trabajo largas (b/129091233).

Versión 1.0.0

Versión 1.0.0

5 de marzo de 2019

Esta es la versión 1.0.0 estable de WorkManager. Esta versión de WorkManager es idéntica a 1.0.0-rc02.

Versión 1.0.0-rc02

21 de febrero de 2019

Esta es la segunda versión potencial para la versión 1.0.0 estable de WorkManager. Esta versión incluye dos correcciones de errores.

Correcciones de errores

  • Los Worker ahora están programados correctamente después de una falla de la aplicación (b/124546316).

  • Los Worker que arrojan una Exception sin marcar ahora se marcan correctamente como FAILED y ya no generan una falla en el proceso de la app.

Versión 1.0.0-rc01

14 de febrero de 2019

Esta es una versión potencial para la versión 1.0.0 estable de WorkManager. Esta versión contiene una corrección de errores.

Correcciones de errores

  • La implementación basada en AlarmManager ahora respeta correctamente las ventanas flex para PeriodicWorkRequests (b/124274584).

Versión 1.0.0-beta05

6 de febrero de 2019

Esta versión contiene algunas correcciones de errores.

Correcciones de errores

  • Se corrigió un caso en el que se usaba JobScheduler.getPendingJob(...) en la API 23 (b/123893059).
  • Se corrigió una NullPointerException en dispositivos que ejecutan Android 5.1 (nivel de API 22) o versiones anteriores (b/123835104).

Versión 1.0.0-beta04

4 de febrero de 2019

Esta versión contiene algunas correcciones de errores.

Correcciones de errores

  • Se mejoró la programación de PeriodicWork para la implementación basada en AlarmManager.
  • Se corrigió un caso en el que WorkManager no podía realizar un seguimiento correcto de las restricciones al usar la implementación basada en AlarmManager (b/123379508).
  • Se corrigió un caso en el que WorkManager no intentaba iniciar un trabajo de nuevo tras finalizar el proceso al usar la implementación basada en AlarmManager (b/123329850).
  • Se corrigió un caso que hacía que WorkManager perdiera Wakelocks al usar la implementación basada en AlarmManager.

Versión 1.0.0-beta03

25 de enero de 2019

Esta versión contiene algunas correcciones de errores.

Correcciones de errores

  • Se incluyó una regresión 1.0.0-beta02 que hacía que el trabajo no se ejecutara correctamente en algunas situaciones (b/123211993).
  • Se corrigió un caso en el que el trabajo no cumplía correctamente con el tiempo de retirada (b/122881597).
  • Se corrigió una instancia de ConcurrentModificationException en dispositivos que ejecutan Android 5.1 (API nivel 22) o versiones anteriores. Esta es una continuación de la corrección de 1.0.0-beta02. (b/121345393).
  • Se agregó exported=false para algunos componentes de nuestro manifiesto que no tenían esta anotación.
  • Se incluyó información sobre la manera en que WorkManager interactúa con el SO en la documentación a nivel de paquete.

Versión 1.0.0-beta02

15 de enero de 2019

Esta versión contiene algunas correcciones de errores.

Correcciones de errores

  • Se corrigió un caso extremo en el que el trabajo periódico podía ejecutarse más de una vez por intervalo en dispositivos con Android 6.0 (nivel de API 23) (b/121998363).
  • Se corrigió una excepción ConcurrentModificationException en dispositivos con Android 5.1 (nivel de API 22) o versiones anteriores (b/121345393).
  • Se corrigió la ejecución errónea del trabajo que ocurría cuando no se cumplían las restricciones en dispositivos con Android 5.1 (nivel de API 22) o versiones anteriores (b/122578012).
  • Se optimizó la administración de la finalización de trabajos para que sea más rápida en algunos casos extremos. (b/122358129)
  • Se agregó un cambio para abordar posibles condiciones de carrera entre varias instancias de LiveData utilizadas por WorkManager.
  • Se decidió usar la dependencia 1.1.1 de Room en lugar de la 1.1.1-rc01; estas versiones son idénticas (b/122578011).

Versión 1.0.0-beta01

19 de diciembre de 2018

Esta versión no contiene cambios de API. Más adelante, se espera que WorkManager conserve la API estable hasta la próxima versión, a menos que surja un problema crítico. Esta versión contiene algunas correcciones de errores.

Correcciones de errores

  • Las versiones secundarias canceladas previamente de trabajos principales completados ya no se ejecutarán (b/120811767).
  • Se inicializaron correctamente las clases de registro (que se encontraban en la superficie durante las pruebas).

Versión 1.0.0-alpha13

12 de diciembre de 2018

Esta versión contiene un cambio mínimo en la API que resultará útil para algunos usuarios de Kotlin.

Cambios en la API

  • Se movió androidx.work.Result a una clase interna de ListenableWorker. De esta manera, se evitan los conflictos de restructuración con la clase de nivel principal de Kotlin Result. Esto es un cambio rotundo en materia de API (b/120564418).

Cambios rotundos en la API

  • androidx.work.Result se movió a una clase interna de ListenableWorker.

Versión 1.0.0-alpha12

5 de diciembre de 2018

Esta versión tiene cambios importantes en la API. Consulta la sección Cambios rotundos en la API a continuación. Es probable que esta versión se lance como nuestra primera versión Beta. alpha12 también incluye actualizaciones de documentación extensas.

Cambios en la API

  • Un nuevo artefacto, work-rxjava2, introduce RxWorker. Este es un ListenableWorker que espera una Single<Payload>.
  • Se quitó la compatibilidad con Firebase JobDispatcher debido a que dejará de estar disponible de manera inminente. Esto quiere decir que el artefacto work-firebase ya no se actualizará en preparación para la versión Beta. En el futuro, agregaremos una alternativa.
  • Payload se integró a Result. Ahora, Result es una "clase sellada" con tres implementaciones concretas, que puedes obtener mediante Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) y Result.retry(). El resultado de ListenableFuture ahora es Result, en lugar de Payload. La clase Worker no tiene métodos de captador y establecedor para el resultado Data. Este es un cambio rotundo.
  • Se agregaron Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) y Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit), además de variantes para mejorar la compatibilidad con los URI de activación lenta de contenido (b/119919774).
  • Se agregó la variante WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Este método requiere API 26.
  • Se agregaron los métodos de extensión de Kotlin Operation.await() y ListenableFuture.await().
  • Se cambió el nombre de Operation.getException() por Operation.getThrowable(). Este es un cambio rotundo.
  • La clase ContentUriTriggers y los métodos que hacen referencia a ella ya no están disponibles para uso público. Este es un cambio rotundo.
  • Se quitó el resto de los métodos de varargs en WorkManager, WorkContinuation y OneTimeWorkRequest para optimizar la API. Para solucionar los problemas de compilación, puedes unir tus varargs existentes con Arrays.asList(...). Todavía incluimos versiones con un solo argumento de cada método. Este es un cambio rotundo.
  • Se quitaron las variantes de WorkContinuation.combine(OneTimeWorkRequest, *). Presentaban una API confusa, mientras que los métodos combine existentes son más fáciles de comprender. Este es un cambio rotundo.

Correcciones de errores

  • Ahora las implementaciones previas a Marshmallow son más confiables cuando se recuperan del cierre de proceso de una tarea que ya está en ejecución.
  • Se realiza el seguimiento de LiveData mediante WorkManager que se observa a través de observeForever. Es un backport de una corrección de biblioteca de Room. b/74477406.
  • Ahora Data.Builder.build() muestra una excepción si el objeto serializado supera su tamaño máximo. Anteriormente, esto solo sucedía en un subproceso en segundo plano, donde no se lo podía administrar correctamente.
  • Mayor distinción entre los trabajos detenidos y cancelados. El elemento getWorkInfoById() mostrará WorkInfo con el CANCELLED State durante ListenableWorker.onStopped().
  • Los null Result se considerarán errores en ListenableWorker. b/120362353
  • Corrección provisional de tablets Shield que ejecutan API 24 y que a veces mostraban una IllegalArgumentException. b/119484416

Cambios rotundos en la API

  • Se quitó la compatibilidad con Firebase JobDispatcher debido a que dejará de estar disponible de manera inminente. Esto quiere decir que el artefacto work-firebase ya no se actualizará en preparación para la versión Beta. En el futuro, agregaremos una alternativa.
  • Payload se integró a Result. Ahora, Result es una "clase sellada" con tres implementaciones concretas, que puedes obtener mediante Result.success() (o Result.success(Data)), Result.failure() (o Result.failure(Data)) y Result.retry(). El resultado de ListenableFuture ahora es Result, en lugar de Payload. La clase Worker no tiene métodos de captador y establecedor para el resultado Data.
  • Se agregaron los métodos de extensión de Kotlin Operation.await() y ListenableFuture.await().
  • Se cambió el nombre de Operation.getException() por Operation.getThrowable().
  • La clase ContentUriTriggers y los métodos que hacen referencia a ella ya no están disponibles para uso público.
  • Se quitó el resto de los métodos de varargs en WorkManager, WorkContinuation y OneTimeWorkRequest para optimizar la API. Para solucionar los problemas de compilación, puedes unir tus varargs existentes con Arrays.asList(...). Todavía incluimos versiones con un solo argumento de cada método.
  • Se quitaron las variantes de WorkContinuation.combine(OneTimeWorkRequest, *). Presentaban una API confusa, mientras que los métodos combine existentes son más fáciles de comprender.

Versión 1.0.0-alpha11

8 de noviembre de 2018

Esta versión contiene muchos cambios que conformarán una API estable en beta. Hay cambios rotundos en la API en esta versión. Consulta la sección Cambios rotundos en la API a continuación.

Cambios en la API

  • El elemento work-runtime-ktx introduce un nuevo CoroutineWorker.
  • El nombre de WorkStatus se cambió a WorkInfo. Todas las variantes correspondientes del método getStatus cambiaron de nombre por las variantes getWorkInfo correspondientes. Este es un cambio rotundo.
  • ListenableWorker.onStopped() ya no acepta un argumento booleano que representa si WorkRequest se canceló. WorkManager ya no hace esta distinción. Este es un cambio rotundo.
  • El nombre del paquete androidx.work.test cambió por androidx.work.testing. Este es un cambio rotundo.
  • Los establecedores en Constraints ya no forman parte de la API pública. Este es un cambio rotundo.
  • Anteriormente, WorkerParameters.getTriggeredContentUris() y WorkerParameters.getTriggeredContentAuthorities() mostraban arreglos. Ahora estos métodos muestran Collections. Este es un cambio rotundo.
  • El nombre de ListenableWorker.onStartWork() cambió por ListenableWorker.startWork(). Este es un cambio rotundo.
  • El constructor de WorkStatus ya no forma parte de la API pública. Este es un cambio rotundo.
  • Los nombres de Configuration.getMaxJobSchedulerID() y Configuration.getMinJobSchedulerID() se cambiaron a Configuration.getMinJobSchedulerId() y Configuration.getMaxJobSchedulerId(), respectivamente. Este es un cambio rotundo.
  • Se agregaron muchas anotaciones @NonNull a la API pública para mejorar su ergonomía.
  • Se agregó la API WorkManager.enqueueUniqueWork() para poner en cola elementos OneTimeWorkRequest únicos sin tener que crear WorkContinuation.
  • Ahora todas las variantes de los métodos enqueue y cancel en WorkManager muestran un nuevo tipo de Operation. Este es un cambio rotundo.
  • Todas las variantes de enqueue ya no aceptan varargs para WorkRequest. Este es un cambio rotundo. Usa Collections en su lugar. Puedes usar Arrays.asList() para modificar el código existente. Realizamos este cambio para reducir la cantidad de métodos y la superficie de la API.
  • Ahora, los intentos de initialize de WorkManager que se repitan más de una vez por proceso darán como resultado IllegalStateException. Este es un cambio rotundo.

Correcciones de errores

  • Ahora, los elementos WorkRequest.Builder en el artefacto work-runtime-ktx usan ListenableWorker. Correcciones b/117666259.
  • Asegúrate de que el próximo tiempo de ejecución de PeriodicWork sea en el futuro. Correcciones b/118204399.
  • Se quitaron las posibles operaciones de I/O del disco cuando usas WorkManager durante el inicio de la app. Correcciones b/117796731.
  • Se corrigió una condición de carrera en WorkConstraintsTracker. (Correcciones android-workmanager/issues/56).

Cambios rotundos en la API

  • El nombre de WorkStatus se cambió a WorkInfo. Todas las variantes correspondientes del método getStatus cambiaron de nombre por las variantes getWorkInfo correspondientes.
  • ListenableWorker.onStopped() ya no acepta un argumento booleano que indique si se canceló WorkRequest. WorkManager ya no hace esta distinción.
  • El nombre del paquete androidx.work.test cambió por androidx.work.testing.
  • Los establecedores en Constraints ya no forman parte de la API pública.
  • Anteriormente, WorkerParameters.getTriggeredContentUris() y WorkerParameters.getTriggeredContentAuthorities() mostraban arreglos. Ahora estos métodos muestran Collections.
  • El nombre de ListenableWorker.onStartWork() cambió por ListenableWorker.startWork().
  • El constructor de WorkStatus ya no forma parte de la API pública.
  • Los nombres de Configuration.getMaxJobSchedulerID() y Configuration.getMinJobSchedulerID() se cambiaron a Configuration.getMinJobSchedulerId() y Configuration.getMaxJobSchedulerId(), respectivamente.
  • Ahora, todas las variantes de los métodos enqueue y cancel en WorkManager muestran un nuevo tipo de Operation.
  • Todas las variantes de enqueue ya no aceptan varargs para WorkRequest.
  • Ahora, los intentos de initialize de WorkManager que se repitan más de una vez por proceso darán como resultado IllegalStateException.

Versión 1.0.0-alpha10

11 de octubre de 2018

Esta versión es compatible con el trabajo asíncrono controlado por el desarrollador. Hay cambios rotundos en la API en esta versión. Consulta la sección Cambios rotundos en la API a continuación.

Adelantamos que WorkManager está ingresando a las fases finales de su período Alfa. Esperamos que la versión Beta sea estable en cuanto a la API. Por ello, asegúrate de completar tus opiniones en nuestro documento de seguimiento de problemas.

Cambios en la API

  • Se quitaron todos los métodos y las clases anteriormente deprecated, en especial, el constructor Worker predeterminado. Esto es un cambio rotundo en materia de API.
  • El nombre de NonBlockingWorker se cambió por ListenableWorker, que ahora es una clase pública visible lista para usar.
    • ListenableWorker proporciona acceso a un método abstracto, ListenableFuture<Payload> onStartWork() al que se llama en el subproceso principal. Puedes iniciar y procesar las tareas de manera asíncrona de la forma que prefieras. Cuando termines, actualiza ListenableFuture según corresponda. Las implementaciones de referencia de ListenableFuture se proporcionan en el paquete Futures en alpha02 (consulta la sección WorkManager a continuación).
    • Worker extiende ListenableWorker y sigue funcionando como antes, con un método Result doWork() abstracto.
    • Algunos métodos y miembros cambiaron de Worker a ListenableWorker.
    • Pronto proporcionaremos implementaciones de referencia para ListenableWorker que usan corrutinas de Kotlin (una vez que se hayan lanzado las versiones estables) y RxJava2.
  • La interfaz WorkerFactory y la implementación concreta DefaultWorkerFactory se fusionaron en una clase abstracta llamada WorkerFactory. La implementación garantiza que el comportamiento predeterminado basado en reflexiones se invocará como un último esfuerzo para cualquier instancia WorkerFactory creada por el usuario. Este es un cambio rotundo.
  • Se quitaron WorkManager.synchronous() y WorkContinuation.synchronous(), y todos los métodos relacionados. Se agregó ListenableFuture<Void> como tipo de resultado de métodos en la API. Esto es un cambio rotundo en materia de API.
    • Ahora puedes usar ListenableFuture para obtener y observar de manera asíncrona. Por ejemplo, se usó WorkManager.enqueue() para mostrar void y ahora muestra ListenableFuture<Void>. Puedes llamar a ListenableFuture.addListener(Runnable, Executor) o ListenableFuture.get() para ejecutar código cuando se complete la operación.
    • Ten en cuenta que ListenableFuture no te indicará si la operación se realizó correctamente o no, solo indicará que se completó. Necesitarás métodos WorkManager para averiguar esta información.
    • Omitimos las llamadas de cancel() a estos objetos, ya que son confusas y su razonamiento es complicado (¿estás cancelando la operación o el trabajo resultante de ella?). Estos detalles se encuentran dentro del contrato de Future.
    • Para mantener la paridad con los métodos getStatus* síncronos, proporcionamos variantes ListenableFuture y cambiamos el nombre de los métodos existentes que mostraban LiveData para que "LiveData" forme parte del nombre de manera explícita (por ejemplo, getStatusesByIdLiveData(UUID)). Esto es un cambio rotundo en materia de API.

Correcciones de errores

  • Se corrigió el error conocido de alpha09 en relación con los archivos androidx-annotations.pro duplicados. Puedes quitar la solución alternativa de las notas de la versión anteriores. Para ello, borra exclude 'META-INF/proguard/androidx-annotations.pro' del archivo Gradle.
  • Se agregaron configuraciones de ProGuard para mantener el constructor Worker nuevo. b/116296569
  • Se corrigió una posible excepción NullPointerException en una condición de carrera en la que el trabajo fue REPLACE (b/116253486 y b/116677275).
  • Ahora, WorkContinuation.combine() acepta un elemento WorkContinuation o más, en lugar de dos o más (b/117266752).

Cambios rotundos en la API

  • Se quitaron todos los métodos y las clases anteriormente deprecated, en especial, el constructor Worker predeterminado.
  • La interfaz WorkerFactory y la implementación concreta DefaultWorkerFactory se fusionaron en una clase abstracta llamada WorkerFactory.
  • Se quitaron WorkManager.synchronous() y WorkContinuation.synchronous().
  • Los métodos WorkManager.getStatus*() ahora muestran ListenableFuture. El elemento WorkManager.getStatus*LiveData() muestra LiveData.

Versión 1.0.0-alpha09

19 de septiembre de 2018

Problema conocido

Si encuentras el siguiente problema: "Se encontró más de un archivo con la ruta independiente 'META-INF/proguard/androidx-annotations.pro' en el SO", escribe lo siguiente en el archivo de Gradle como solución alternativa hasta que resolvamos el problema en alpha10:

Groovy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

Correcciones de errores

  • Se agregó otra corrección necesaria para el error "100 tareas". b/115560696
  • Se agregaron algunas correcciones para los errores de restricción de clave externa debido a condiciones de carrera. b/114705286
  • Se delegaron las llamadas de ConstraintTrackingWorker.onStopped(boolean) al Worker subyacente. b/114125093
  • Aplica el retraso de retirada mínimo correcto para Firebase JobDispatcher. b/113304626
  • Mejoras a las garantías de subprocesos internas de la biblioteca.
  • Correcciones de posibles problemas la eliminación de duplicados de LiveData a nivel interno.

Cambios en la API

  • Para crear tus propias instancias de Worker en el tiempo de ejecución, ahora puedes especificar una WorkerFactory como parte de WorkManager.Configuration. La fábrica de resguardo es DefaultWorkerFactory, lo que coincide con el comportamiento de versiones anteriores de WorkManager.
    • Ahora, los constructores predeterminados para Worker y NonBlockingWorker ahora identificados como obsoletos. Usa el nuevo constructor (Worker(Context, WorkerParameters)) y llama a super(Context, WorkerParameters). Las versiones futuras de WorkManager quitarán el constructor predeterminado.
  • Comenzamos a usar el nuevo artefacto ListenableFuture de manera interna (sin dependencias de Guava). Implementaremos ListenableFutures a la API en las próximas versiones. Este cambio permitirá que se muestre NonBlockingWorker eventualmente.
  • Agrega la capacidad de activar tareas programadas en TestDriver mediante TestDriver.setInitialDelayMet(UUID) y TestDriver.setPeriodDelayMet(UUID). (b/113360060).

Cambios rotundos

  • Los constructores predeterminados Worker y NonBlockingWorker dejaron de estar disponibles. Migra al nuevo constructor tan pronto como sea posible. Las próximas versiones quitarán el constructor predeterminado.

Versión 1.0.0-alpha08

27 de agosto de 2018

Correcciones de errores

  • Los componentes de WorkManager etiquetados explícitamente como directos inician de manera inadvertida a fin de que no se activen durante el inicio directo. En el futuro, proporcionaremos una versión de WorkManager que inicie directamente. b/112665532
  • Se corrigió un problema en el que las tareas que se reintentaron no se ejecutaban. b/112604021
  • Se corrigieron las tareas periódicas que no se ejecutaban reiteradamente (relacionado con el problema anterior). b/112859683
  • Se cumplieron las políticas de retirada cuando el proceso de la app ya estaba ejecutándose.
  • Se corrigieron los mensajes de excepción en Data para indicar que el límite es 10 KB.
  • Se redujo el valor máximo de Configuration.setMaxSchedulerLimit(int) a 50 para tener en cuenta la latencia al completar el procesamiento de JobScheduler (b/112817355).

Versión 1.0.0-alpha07

16 de agosto de 2018

Correcciones de errores

  • Se corrigió una potencial consulta de SQL con límites negativos que podría mostrar un número ilimitado de resultados.
  • Ahora un trabajo que terminó de ejecutarse cancela correctamente todas las copias pendientes de ese trabajo en otros programadores. Esto provocó que se supere el límite de trabajos de JobScheduler. b/111569265
  • Se corrigió una ConcurrentModificationException en ConstraintTracker. b/112272753
  • Se cambiaron las anotaciones de tipo de datos que se muestra de Data.getBooleanArray(String) y Data.getIntArray(String) por @Nullable, en lugar de @NonNull. (b/112275229).

Cambios en la API

  • Ahora, Worker extiende una clase nueva, NonBlockingWorker. Esto no afecta ningún uso actual. En el futuro, NonBlockingWorker se convertirá en una entidad totalmente compatible para las soluciones de subprocesos personalizados.
  • Se cambiaron las anotaciones de tipo de datos que se muestra de Data.getBooleanArray(String) y Data.getIntArray(String) por @Nullable, en lugar de @NonNull. b/112275229
  • Extensiones de Kotlin: Map.toWorkData() dejó de estar disponible y agregó un elemento workDataOf(vararg Pair<String, Any?>) de nivel superior para mayor coherencia con las API existentes.

Versión 1.0.0-alpha06

1 de agosto de 2018

Correcciones de errores

  • Se evitó un bloqueo de la base de datos al programar un trabajo. b/111801342
  • Se corrigió un error que provocaba que PeriodicWork no se ejecutara en función de lo programado cuando estaba activado el modo Descanso. b/111469837
  • Se corrigió una condición de carrera en la que las limitaciones de seguimiento provocaban que WorkManager fallara. googlecodelabs/android-workmanager/issues/56.
  • Se crearon objetos WorkRequest únicos durante el uso de WorkRequest.Builder#build(). b/111408337
  • Se habilitó el uso de RescheduleReceiver solo cuando hay objetos WorkRequest que lo necesitan (b/111765853).

Versión 1.0.0-alpha05

24 julio de 2018

Cambios en la API

  • Ahora WorkManager.getInstance() tiene anotaciones con @NonNull, en lugar de @Nullable. En cambio, si el singleton no se inicializó correctamente en los casos de inicialización manual, el método arrojará una IllegalStateException. Esto es un cambio rotundo en materia de API.
  • Se agregó una nueva API, Configuration.Builder.setMinimumLoggingLevel(int), que puede controlar la verbosidad de WorkManager. De forma predeterminada, WorkManager registra Log.INFO y versiones superiores.
  • Se cambió la firma de Data.getString() de manera que ya no toma un valor predeterminado (es null de manera implícita). Esto es un cambio rotundo en materia de API.
  • Se identificaron como @hide algunos métodos que solo se necesitan para uso interno. Se incluye al constructor Constraints, Data.toByteArray() y Data.fromByteArray(byte[]). Esto es un cambio rotundo en materia de API.

Correcciones de errores

  • WorkManager ya no ejecuta trabajos durante los casos conocidos de copias de seguridad automáticas. Esto podría haber ocasionado una falla. b/110564377
  • Se corrigió la programación doble de objetos PeriodicWorkRequest al usar JobScheduler. b/110798652
  • Se corrigió un problema con objetos PeriodicWorkRequest que no se ejecutaban correctamente después de que un dispositivo estaba en descanso. b/111469837
  • Se solucionó un problema con retrasos iniciales durante el uso de Firebase JobDispatcher. b/111141023
  • Se solucionaron algunas potenciales condiciones de carrera y problemas de sincronización.
  • Se liberaron correctamente objetos BroadcastReceiver que ya no eran necesarios.
  • Se optimizó el rendimiento de la reprogramación durante el reinicio de las apps después de un cierre forzado.
  • Se permitió el llamado a TestScheduler.setAllConstraintsMet(UUID) antes o después de colocar en cola la WorkRequest determinada. (b/111238024).

Cambios rotundos

  • Ahora WorkManager.getInstance() tiene anotaciones con @NonNull, en lugar de @Nullable.
  • Se cambió la firma de Data.getString(), de manera que ya no toma un valor predeterminado (es null de manera implícita).
  • Se identificaron como @hide algunos métodos que solo se necesitan para uso interno. Esto incluye al constructor Constraints, Data.toByteArray() y Data.fromByteArray(byte[]).

Versión 1.0.0-alpha04

26 de junio de 2018

Correcciones de errores

  • Ahora los elementos PeriodicWorkRequest se reprogramaron correctamente para el uso de la implementación basada en AlarmManager.
  • Se corrigió un potencial ANR durante la reprogramación de todos los trabajadores después de una detención forzada o un reinicio. b/110507716
  • Se agregaron anotaciones de nulidad a varias API de WorkManager. b/110344065
  • Se registraron las excepciones no capturadas que ocurren durante la ejecución de Worker. b/109900862
  • Se permitieron las migraciones de bases de datos destructivas en caso de que decidas volver a una versión anterior de WorkManager. b/74633270
  • Se solucionó una falla de migración que ocurría cuando se creaban etiquetas implícitas duplicadas. Este es un problema muy poco usual que solo ocurría si usabas el mismo formato de etiqueta implícita.

Versión 1.0.0-alpha03

19 de junio de 2018

Correcciones de errores

  • Se corrigió una condición de carrera en la implementación basada en AlarmManager. b/80346526.

  • Se corrigió la duplicación de tareas durante el uso de JobScheduler después de reiniciar un dispositivo.

  • Ahora las tareas con URI de contenido persisten entre reinicios. b/80234744

  • Actualizaciones de documentación. b/109827628, b/109758949, b/80230748

  • Se solucionó una falla que se producía al volver a colocar en cola una WorkRequest. b/109572353

  • Se corrigieron las advertencias del compilador Kotlin durante el uso de la dependencia work-runtime-ktx.

  • Ahora, WorkManager usa Room versión 1.1.1-rc1.

Cambios en la API

  • Se agregó getStatusesSync(), la versión síncrona de WorkContinuation.getStatuses().
  • Worker permite distinguir entre una cancelación iniciada por el usuario y una detención temporaria solicitada por el SO. El elemento Worker.isStopped() muestra true si se solicitó algún tipo de detención. Worker.isCancelled() muestra true cuando el trabajo se canceló de manera explícita. b/79632247
  • Se agregó compatibilidad con JobParameters#getNetwork() en la API 28. Se expone mediante Worker.getNetwork().
  • Se agregó Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) para que apliques de manera forzosa la cantidad de trabajos que se envían a JobScheduler o AlarmManager. Esto ayuda a evitar que WorkManager tome todos los espacios de JobScheduler disponibles.
  • Se agregó Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), que ayuda a definir un rango de ID de tarea de JobScheduler para que use WorkManager (b/79996760).
  • Worker.getRunAttemptCount() muestra el recuento de ejecución actual de un objeto Worker determinado. b/79716516
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) te permite poner en cola un elemento PeriodicWorkRequest único. b/79600647
  • WorkManager.cancelAllWork() cancela todos los elementos Worker. Las bibliotecas que dependen de WorkManager pueden consultar cuándo se llamó a este método por última vez. Para ello, pueden utilizar WorkManager.getLastCancelAllTimeMillis() para una limpieza adicional del estado interno.
  • Se agregó WorkManager.pruneWork() para quitar los trabajos completados de la base de datos interna. b/79950952, b/109710758.

Cambios en el comportamiento

  • Se agregó una etiqueta implícita para todas las WorkRequest, que es el nombre de clase completamente calificado para el elemento Worker. Esto permite quitar objetos WorkRequest sin tag o cuando el id no está disponible (b/109572351).

Cambios rotundos

  • Se cambió el nombre de Worker.WorkerResult por Worker.Result.
  • Worker.onStopped ahora tiene un parámetro adicional isCancelled configurado en true cuando el elemento Worker se canceló de manera explícita.

Versión 1.0.0-alpha02

24 de mayo de 2018

Correcciones de errores

  • Se corrigió una NullPointerException en State.isFinished(). b/79550068
  • Se corrigió un problema que ocasionaba que los objetos Worker se reprogramaran en Application.onCreate(). b/79660657
  • Se corrigió un problema que ocasionaba que se pudieran programar más tareas de las que permitía el SO. b/79497378
  • Se movió la limpieza de bloqueos de activación asociados con elementos Worker al subproceso en segundo plano.
  • Ahora, la implementación de AlarmManager se limpia correctamente cuando se completa todo el trabajo pendiente.
  • Se corrigió la limpieza de consultas de SQL que afectaba a las configuraciones regionales distintas del inglés. b/80065360
  • Se agregó compatibilidad con objetos float en Data. b/79443878
  • Ahora, Data.Builder.putAll() muestra una instancia de Builder. b/79699162
  • Más Javadoc y correcciones en la documentación. b/79691663

Cambios en la API

  • Los elementos Worker pueden reaccionar a una detención. Se puede usar Worker.isStopped() para verificar si se detuvo un elemento Worker. Se puede usar Worker.onStopped() para realizar operaciones de limpieza livianas.
  • La API Worker.getTags() muestra un Set de etiquetas asociadas con el elemento Worker.
  • Se agregaron sobrecargas de javax.time.Duration para API que usan una combinación de duración y TimeUnit. Esto lo supervisa @RequiresApi(26).
  • Las extensiones de WorkManager se trasladaron del paquete androidx.work.ktx al paquete androidx.work. Las extensiones anteriores dejaron de estar disponibles y se quitarán en una versión futura.
  • Configuration.withExecutor() ya no está disponible. Usa Configuration.setExecutor() en su lugar.

Versión 1.0.0-alpha01

8 de mayo de 2018

WorkManager simplifica la programación y ejecución de trabajo en segundo plano garantizado y optimizado para limitaciones. Esta versión inicial es 1.0.0-alpha01.