La Vista previa para desarrolladores de Android 11 ya está disponible. Pruébala y comparte tus comentarios.

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 actual Próxima versión potencial Versión Beta Versión Alfa
22 de enero de 2020 2.3.0 - - -

Cómo declarar dependencias

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

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

    dependencies {
      def work_version = "2.3.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"
      }
    

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.

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 la versión 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 ha completado (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 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 artículo.

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 artículo.

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 artículo.

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 encuentras problemas, puedes agregar lo siguiente a tu build.gradle: kotlinOptions { jvmTarget = "1.8" }
  • Se agregó inicialización on demand para WorkManager, con lo que se creará WorkManager solo cuando se haga referencia a este (b/127497100). Si quieres configurar tu proyecto para la inicialización on demand:
    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 ejecutando la inicialización on demand.
  • PeriodicWorkRequest ahora admite retrasos iniciales. Puedes usar el método setInitialDelay en PeriodicWorkRequest.Builder para establecer una demora 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 WorkManager usa para toda su contabilidad interna por medio 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 obtiene 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 artículo.

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 artículo.

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 artículo.

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 una demora 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 WorkManager usa para toda su contabilidad interna por medio de Configuration.Builder.setTaskExecutor.

  • Documentación mejorada sobre WorkRequest.keepResultsForAtLeast (b/130638001), inicialización on demand 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 se adaptarán a la versión 1.x. Te recomendamos usar la versión 2.x.

Cambios en la API

  • Se agregó inicialización on demand para WorkManager, con lo que se creará WorkManager solo cuando se haga referencia a este (b/127497100). Si quieres configurar tu proyecto para la inicialización on demand:
    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 ejecutando la inicialización on demand.
  • 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 obtiene 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 anotaciones con tipos de resultado @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 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 relacionada con el seguimiento de restricciones, que no se borraba en API anteriores a JobScheduler (b/129226383).
  • Se corrigió un error de StackOverflowError relacionado con largas cadenas de trabajo (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 usar esta versión, en lugar de las versiones 1.x heredadas. Todo el desarrollo activo tendrá como objetivo 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 tendrá como objetivo 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
     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"
      }
    

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.

Ten en cuenta que se recomienda especialmente a los usuarios actualizar WorkManager 2.x, ya que habrá muy pocos cambios a la rama 1.x de aquí en adelante. 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 relacionada con el seguimiento de restricciones, que no se borraba en API anteriores a JobScheduler (b/129226383).
  • Se corrigió un error de StackOverflowError relacionado con largas cadenas de trabajo (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

  • Las clases Worker ahora están correctamente programadas, después de una falla de la app (b/124546316).

  • Las clases Worker que arrojan una Exception sin marcar ahora se marcan correctamente como FAILED y ya no bloquean 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 con Android 5.1 (API nivel 22) o inferior (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 podía volver a intentar el trabajo tras el cierre de un 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

  • Presentamos 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 con Android 5.1 (API nivel 22) o anterior. 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 cómo WorkManager interactúa con el SO en la documentación de 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 límite en el que el trabajo periódico podía ejecutarse más de una vez por intervalo en dispositivos con Android 6.0 (API nivel 23). b/121998363
  • Se corrigió una ConcurrentModificationException en dispositivos con Android 5.1 (API nivel 22) o inferior (b/121345393).
  • Se corrigió la ejecución errónea del trabajo cuando no se cumplen las restricciones en dispositivos con Android 5.1 (API nivel 22) o anterior. b/122578012
  • Manejo optimizado de finalización de trabajo para ofrecer mayor rapidez en algunos casos extremos. b/122358129
  • Se agregó un cambio para abordar posibles condiciones de carrera entre varias instancias de LiveData que usa WorkManager.
  • Se realizó la transferencia para usar la dependencia 1.1.1 de Room, en lugar de 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

  • androidx.work.Result se movió 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 comprensibles. Este es un cambio rotundo.

Correcciones de errores

  • Ahora las implementaciones previas a Marshmallow son más confiables al recuperarse 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 comprensibles.

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 cambió por 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() cambiaron por 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 cambió por 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 representa si WorkRequest se canceló. 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() cambiaron por 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 cambió por ListenableWorker, que ahora es una clase pública visible y está lista para su uso.
    • 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 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:

    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. Si el singleton no se inicializó correctamente en los casos de inicialización manual, el método mostrará una IllegalStateException en su lugar. Esto es un cambio rotundo en materia de API.
  • Se agregó una nueva API, Configuration.Builder.setMinimumLoggingLevel(int), que puede controlar el nivel de detalle 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 WorkRequestWorkRequest. 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 trabajo 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 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 androix.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 la ejecución de trabajo en segundo plano garantizado y optimizado para limitaciones. Esta versión inicial es 1.0.0-alpha01.