WorkManager
| Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
|---|---|---|---|---|
| 22 de octubre de 2025 | 2.11.0 | - | - | - |
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.11.0" // (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.11.0" // (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.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 2.11
Versión 2.11.0
22 de octubre de 2025
Lanzamiento de androidx.work:work-*:2.11.0. La versión 2.11.0 contiene estas confirmaciones.
Cambios importantes desde la versión 2.10.0:
- Se actualizó
minSdkde la API 21 a la API 23. - Se agregó la API
setRemoteSessionTimeoutMillisen el compilador de configuración deWorkManagerpara permitir la configuración de la cantidad de tiempo que una sesión deRemoteWorkManagerestá activa desde su último uso.
Versión 2.11.0-rc01
8 de octubre de 2025
Lanzamiento de androidx.work:work-*:2.11.0-rc01. La versión 2.11.0-rc01 contiene estas confirmaciones.
Versión 2.11.0-beta01
24 de septiembre de 2025
Lanzamiento de androidx.work:work-*:2.11.0-beta01. La versión 2.11.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se agregó
stopRunningWorkWithReasonaWorkManagerTestDriver. (Ie53b2, b/439955564)
Correcciones de errores
- Se corrigió la detención del servicio en primer plano cuando hay comandos pendientes (Iae822, b/432069314).
- Se corrigió un error por el que el trabajador de corrutinas remoto no podía desvincular el servicio remoto (I842f2, b/247113322).
Versión 2.11.0-alpha01
27 de agosto de 2025
Lanzamiento de androidx.work:work-*:2.11.0-alpha01. La versión 2.11.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Se actualizó el valor de minSdk de la API 21 a la API 23 (Ibdfca, b/380448311, b/435705964, b/435705223).
- Se agregó la API
setRemoteSessionTimeoutMillisen el compilador de Configuration de WorkManager para permitir la configuración de la cantidad de tiempo que una sesión de RemoteWorkManager está activa desde su último uso. (Ib23c8) - Se agregó una API experimental en
WorkRequest.Builderpara aplicar una espera exponencial cuando el sistema interrumpe el trabajo. (Ie2dc7, b/335513480) - Se agregó una API de prueba para pasar una clase de trabajador diferente a
TestListenableWorkerBuilderque la que se está compilando para admitir implementaciones personalizadas deWorkerFactory(If6bff, b/389154854).
Correcciones de errores
- Se almacenan en caché las capacidades de red en
SharedNetworkCallbackpara evitar IPC innecesarias (Ie4027, b/427115602). - Se corrigió un problema con la evaluación de restricciones de red en el que los elementos de trabajo posteriores al primero no obtenían las capacidades de red actuales y, en cambio, alcanzaban
ConstraintsNotMetdespués de un tiempo de espera (Ib6a66, b/427115602).
Versión 2.10
Versión 2.10.5
24 de septiembre de 2025
Lanzamiento de androidx.work:work-*:2.10.5. La versión 2.10.5 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió la detención del servicio en primer plano cuando hay comandos pendientes (Iae822, b/432069314).
Versión 2.10.4
10 de septiembre de 2025
Lanzamiento de androidx.work:work-*:2.10.4. La versión 2.10.4 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema por el que
RemoteCoroutineWorkerno podía desvincular el servicio remoto (I842f2, b/247113322).
Versión 2.10.3
30 de julio de 2025
Lanzamiento de androidx.work:work-*:2.10.3. La versión 2.10.3 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema por el que los trabajadores con restricciones de red idénticas a las de un trabajador anterior informaban que no se cumplían sus restricciones. (b/427115602).
Versión 2.10.2
18 de junio de 2025
Lanzamiento de androidx.work:work-*:2.10.2. La versión 2.10.2 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema que se producía cuando se conservaban trabajadores con solicitudes de red y capacidades predeterminadas, lo que provocaba que se volvieran a agregar las capacidades quitadas y que los trabajadores con restricciones de red se comportaran de forma incorrecta. (b/409716532)
- Se corrigió un error que provocaba que los trabajadores con restricciones de red no se ejecutaran de inmediato debido a que no se cumplían las restricciones, a pesar de que la red y las capacidades estaban disponibles. (b/423403088)
Versión 2.10.1
23 de abril de 2025
Lanzamiento de androidx.work:work-*:2.10.1. La versión 2.10.1 contiene estas confirmaciones.
Correcciones de errores
- Reduce la posibilidad de que se arroje
TooManyRequestsExceptiondesde el registro deWorkManagerde unNetworkCallbackque se usa para el seguimiento de restricciones. (b/231499040, b309d5).
Versión 2.10.0
30 de octubre de 2024
Lanzamiento de androidx.work:work-*:2.10.0. La versión 2.10.0 contiene estas confirmaciones.
Cambios significativos desde la versión 2.9.1
- Se agregaron etiquetas de seguimiento a Jobs desde
WorkManager, lo que hace que "adb shell dumpsys jobscheduler" sea mucho más fácil de comprender, ya que contendrá el nombre del Worker que se está ejecutando. También se agregan secciones de seguimiento alrededor de las áreas clave deWorkManager. - Se agregó
Configuration.workerCoroutineContextpara controlar el dispatcher en el que se ejecutaCoroutineWorker. - Los desarrolladores pueden especificar
NetworkRequestcomo una restricción para un trabajador a través del métodoConstraints.setRequiredNetworkRequest. Esto permite un control más detallado sobre qué red debe ejecutar este trabajador. - La versión 2.10.0 de
WorkManagerahora se compila con el SDK 35 y contiene varios cambios para la compatibilidad con el SDK 35.
Versión 2.10.0-rc01
24 de octubre de 2024
Lanzamiento de androidx.work:work-*:2.10.0-rc01. La versión 2.10.0-rc01 contiene estas confirmaciones.
Versión 2.10.0-beta01
2 de octubre de 2024
Lanzamiento de androidx.work:work-*:2.10.0-beta01. La versión 2.10.0-beta01 contiene estas confirmaciones.
Versión 2.10.0-alpha04
18 de septiembre de 2024
Lanzamiento de androidx.work:work-*:2.10.0-alpha04. La versión 2.10.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Agrega el motivo de detención
STOP_REASON_FOREGROUND_SERVICE_TIMEOUTpara cuando se detiene un trabajador en primer plano debido a un tiempo de espera de ejecución según el tipo de servicio en primer plano. (Ibd0af)
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 Jobs desde
WorkManager, lo que hace que "adb shell dumpsys jobscheduler" sea mucho más fácil de comprender, ya que contendrá el nombre del Worker que se está ejecutando. También se agregan secciones de seguimiento alrededor de las áreas clave deWorkManager.
Cambios en la API
- WorkManager 2.10.0 ahora se compila con el SDK 35.
- Se corrigió el problema de tiempo de espera de los trabajadores en primer plano de tipo "servicio corto" y "sincronización de datos", que provocaba un error de ANR cuando
WorkManagerno llamaba astopSelf(). Esta corrección solo se aplica a dispositivos con las APIs 34 y 35, en las que se introdujeron los tipos de servicios en primer plano. (ca06b2, b/364508145) - Nuevas APIs de
WorkerParametersque permiten cambiar el proceso remoto al que se vincula elWorkercuando se usa unWorkerFactory. (Ibdc8a, Ie8a90, I7373f)
Correcciones de errores
- Se corrigió una falla causada por
WorkManagerque intentaba reiniciar un trabajador de larga duración (es decir, un trabajador en primer plano) cuando el tipo de primer plano del trabajo tenía permisos previos de Android 14 que se revocaron. (b/333957914) - Se quitó el esquema manual del acceso a las nuevas APIs de la plataforma, ya que esto sucede automáticamente a través del modelado de APIs cuando se usa R8 con AGP 7.3 o versiones posteriores (p.ej., 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 actualizar a la versión 8.1 o posterior de D8. 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 registro a través de un
@RestrictToTracerconfigurable enWorkManager. (I17d7f, b/260214125) - Se agregó
Configuration.workerCoroutineContextpara controlar el dispatcher en el que se ejecutaCoroutineWorker. Ayuda a evitar por completo el uso deDispatchers.DefaultenWorkManager. (Icd1b7) - Se agregaron controladores de excepciones personalizados para los Workers (Ib1b74, b/261190695).
- Ahora,
OneTimeWorkRequest.BuilderyPeriodicWorkRequest.Builderse pueden construir conKClassen lugar deClass:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()(Ib55f6). - Se migró la clase
WorkManagera Kotlin. Ahora, los métodos que devuelvenLiveData,ListenableFutureoFlowproporcionan información correcta sobre la nulabilidad. Podría requerir cambios en el código fuente de los clientes 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
NetworkRequestcomo una restricción para un trabajador a través del métodoConstraints.setRequiredNetworkRequest. Esto permite un control más detallado sobre qué red debe ejecutar este trabajador.
Cambios en la API
- Se agregó la capacidad de especificar
NetworkRequestcomo 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
- Se corrigió una falla causada por
WorkManagerque intentaba reiniciar un trabajador de larga duración (es decir, un trabajador en primer plano) cuando el tipo de primer plano del trabajo tenía permisos previos de Android 14 que se revocaron. (b/333957914)
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. En lugar deLiveData, ahora se puede observar el progreso de Worker a través de Flow conWorkManager.getWorkInfosFlowy métodos similares. - Ahora
WorkManagerproporciona una sugerencia sobre por qué se detuvo un trabajador anteriormente. Se puede consultar desde un trabajador a través del métodogetStopReason()o desdeWorkInfoa través degetStopReason(). - Programación precisa de trabajadores periódicos a través de
setNextScheduleTimeOverride. Esto permite el cálculo dinámico del próximo programa de trabajo periódico, que se puede usar para implementar funciones avanzadas, como tiempos de actualización adaptativos, comportamiento de reintento personalizado o hacer que un trabajador de un feed de noticias se ejecute antes de que el usuario se despierte cada mañana sin desviación.ExistingPeriodicWorkPolicy.UPDATEse debe usar con estas técnicas para evitar cancelar un worker en ejecución mientras se programa el siguiente. - Las pruebas de WorkManager con subprocesos coinciden con la producción.
ExecutorsMode.PRESERVE_EXECUTORSse puede usar eninitializeTestWorkManagerpara conservar los ejecutores establecidos enConfigurationy usar el subproceso principal real. - Las APIs de corrutinas, como
CoroutineWorker, se trasladaron del artefacto adicional work-runtime-ktx al artefacto principal work-runtime. Ahora, work-runtime-ktx está vacío.
Cambios en la API
- Se agregó
stopReasonaWorkInfo. Hace questopReasonesté disponible después de que se ejecute el trabajador. Podría ser útil en los informesstopReasonde una manera utilizable, ya que, una vez que se detiene un worker, la app en sí podría cerrarse muy rápidamente. (I21386) - Permite que
Clockse 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()aListenableWorkerque proporciona una sugerencia sobre por qué se detuvo el trabajador. (I07060) - Se agregó
WorkManagerTestInitHelper#closeWorkDatabase()para evitar la advertencia de Closeguard sobre los recursos filtrados. (Ia8d49) - El constructor de
WorkInfoahora es público, lo que puede ser útil en las pruebas. (Ia00b6, b/209145335) work-runtime-ktxahora está vacío.CoroutineWorkery otras utilidades específicas de Kotlin ahora están disponibles en el artefacto principal de work-runtime. (I71a9a)- Se agregó el método
setNextScheduleTimeOverride, que permite configurar con precisión los programas de trabajo periódicos (I3b4da). - Se agregó
getNextScheduleTimeMillispara obtener información sobre el tiempo de ejecución programado enWorkInfo. (I797e4) - Se agrega información sobre el retraso inicial y la periodicidad a
WorkInfo. (I52f2f) - Se agregaron métodos para observar trabajadores a través de Flows con los métodos
getWorkInfosByTagFlow,getWorkInfoByIdFlow,getWorkInfosForUniqueWorkFlowygetWorkInfosFlow(If122a). - Se agregaron anotaciones
@RequiresApi(...)faltantes a los constructores y las propiedades deConstraints. Ahora están alineadas con las anotaciones correspondientes en los métodos setter deConstraints.Builderque existían desde las primeras versiones deWorkManager. (I6d7d2) WorkManagerahora tiene un límite independiente para los workers de URI de contenido, lo que les garantiza ranuras enJobSchedulerpara evitar que falten actualizaciones de contenido bajo una carga alta. El límite se puede configurar a través deConfiguration.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.
- Sin modificaciones 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
- Se agregaron constantes para los motivos de detención que devuelven
WorkInfo.stopReasonyListenableWorker.stopReason(I0cc00).
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
WorkManagerproporciona una sugerencia sobre por qué se detuvo un trabajador anteriormente. Se puede consultar desde un trabajador a través del métodogetStopReason()o desdeWorkInfoa través degetStopReason().
Cambios en la API
- Se agregó
stopReasonaWorkInfo. Pone a disposiciónstopReasondespués de que se ejecutó el trabajador. Podría ser útil en el informestopReasonde forma utilizable, ya que, una vez que se detiene un worker, la app en sí podría cerrarse muy rápidamente. (I21386) - Permite que el reloj se configure 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()aListenableWorkerque proporciona una sugerencia sobre por qué se detuvo el trabajador. (I07060) - Se agregó
WorkManagerTestInitHelper#closeWorkDatabase()para evitar la advertencia de Closeguard sobre los recursos filtrados. (Ia8d49)
Correcciones de errores
- Se agregó la capacidad de omitir
overrideNextScheduleTimeconTestDrivery 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. En lugar deLiveData, ahora se puede observar el progreso de Worker a través de Flow conWorkManager.getWorkInfosFlowy métodos similares. - Programación precisa de trabajadores periódicos a través de
setNextScheduleTimeOverride. Esto permite el cálculo dinámico del próximo programa de trabajo periódico, que se puede usar para implementar funciones avanzadas, como tiempos de actualización adaptativos, comportamiento de reintento personalizado o hacer que un trabajador de un feed de noticias se ejecute antes de que el usuario se despierte cada mañana sin desviación.ExistingPeriodicWorkPolicy.UPDATEse debe usar con estas técnicas para evitar cancelar un worker en ejecución mientras se programa el siguiente. - Las pruebas de
WorkManagercoinciden con la producción de subprocesos.ExecutorsMode.PRESERVE_EXECUTORSse puede usar para conservar los ejecutores establecidos enConfigurationy para usar el subproceso principal real. - Las APIs de corrutinas, como
CoroutineWorker, se trasladaron del artefacto adicionalwork-runtime-ktxal artefacto principalwork-runtime.work-runtime-ktxahora está vacío.
Cambios en la API
- El constructor de
WorkInfoahora es público, lo que puede ser útil en las pruebas. (Ia00b6, b/209145335) work-runtime-ktxahora está vacío,CoroutineWorkery otras utilidades específicas de Kotlin ahora están disponibles en el artefacto principalwork-runtime. (I71a9a)- Se agregó el método
setNextScheduleTimeOverride, que permite configurar con precisión los programas de trabajo periódicos (I3b4da). - Se cambió el nombre de
getEarliestRunTimeMillisagetNextScheduleTimeMillis. (I2bd7a) - Se agrega información sobre la próxima hora de ejecución programada a
WorkInfo. (I797e4) - Se agrega información sobre el retraso inicial y la periodicidad a
WorkInfo. (I52f2f) - Se agregaron métodos para observar trabajadores a través de Flows con los métodos
getWorkInfosByTagFlow,getWorkInfoByIdFlow,getWorkInfosForUniqueWorkFlowygetWorkInfosFlow(If122a). - Se agregaron anotaciones
@RequiresApi(...)faltantes a los constructores y las propiedades de Constraints. Ahora están alineadas con las anotaciones correspondientes en los métodos setter deConstraints.Builderque existían desde las primeras versiones deWorkManager. (I6d7d2) WorkManagerahora tiene un límite independiente para los workers de URI de contenido, lo que les garantiza ranuras enJobSchedulerpara evitar que falten actualizaciones de contenido bajo una carga alta. El límite se puede configurar a través deConfiguration.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
RescheduleReceiverque 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
- Se agregó la capacidad de actualizar
WorkRequestsde forma no invasiva, lo que preserva el tiempo de cola original, el encadenamiento, etc. Consulta la entrada de blog detallada sobre esta característica, así como los javadocs paraWorkManager.updateWorkyExistingPeriodicWorkPolicy.UPDATEpara obtener más detalles.
Cambios en la API
- Se agregó
WorkManager.updateWorkpara 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 laREPLACEexistente, 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.REPLACEdejó de estar disponible para haya menos confusión entre los nombresREPLACEyUPDATEque son muy similares. Si aún deseas mantener la semántica anterior deREPLACE, puedes usar laCANCEL_AND_REENQUEUErecién agregada, que es idéntica aREPLACE(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
OneTimeWorkRequestyPeriodicWorkRequestdeandroidx.work:work-runtime-ktxaandroidx.work:work-runtime(I0010f, b/209145335). - Se agregaron los métodos auxiliares
WorkQuery.fromIds,WorkQuery.fromStates,WorkQuery.fromUniqueWorkNamesyWorkQuery.fromTagspara crearWorkQueryde forma directa (b/199919736) (If48f2, b/199919736) - Se agregó
getForegroundInfoaWorker(Ic1ead). RxWorker, tanto para RxJava 2 como para RxJava 3, ahora tienesetForegroundque muestraCompletableque se puede usar en lugar desetForegroundInfoAsyncque muestraListenableFuture.RxWorkerpara RxJava 2 y RxJava 3 tienegetForegroundInfoque muestraSingleque se puede usar en lugar degetForegroundInfoAsyncque muestraListenableFuture(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 degetConfiguration()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ó
@RequiresPermissiona las APIs que requieren que se otorgue el permisoPOST_NOTIFICATIONSen SDK 33 y versiones posteriores (Ie542e, b/238790278). - Se propagan las cancelaciones de
CoroutineScopeaListenableFuturecuando se usasuspendCancellableCoroutine.
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
equalsenWorkInfo, 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()yWorkerParameters.getGeneration()que muestran la generación de un trabajador. Un trabajador tiene varias generaciones si se actualizó medianteWorkManager.updateWorkoWorkManager.enqueueUniquePeriodicWorkconExistingPeriodicWorkPolicy.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ó inicializarWorkManager(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
WorkRequestsde forma no invasiva, lo que preserva el tiempo de cola original, el encadenamiento, etc. ConsultaWorkManager.updateWorkyExistingPeriodicWorkPolicy.UPDATEpara obtener más detalles.
Cambios en la API
- Se agregó
WorkManager.updateWorkpara 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 laREPLACEexistente, 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.REPLACEdejó de estar disponible para haya menos confusión entre los nombresREPLACEyUPDATEque son muy similares. Si aún deseas mantener la semántica anterior deREPLACE, puedes usar laCANCEL_AND_REENQUEUErecién agregada, que es idéntica aREPLACE(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
OneTimeWorkRequestyPeriodicWorkRequestdeandroidx.work:work-runtime-ktxaandroidx.work:work-runtime(I0010f, b/209145335).
Correcciones de errores
- Se agregó
@RequiresPermissiona 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 degetConfiguration()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.fromUniqueWorkNamesyWorkQuery.fromTagspara crear WorkQuery de forma directa (If48f2, b/199919736). - Se agregaron métodos BuildCompat experimentales para SDKs futuros (Iafd82, b/207528937).
- Se agregó
getForegroundInfoaWorker(Ic1ead). - Se agregaron los métodos auxiliares
WorkQuery.fromIdspara crear WorkQuery de manera directa desde los ID (Ie5bdf, b/199919736). - RxWorker ahora tiene
setForegroundpara mostrarCompletableque se puede usar en lugar desetForegroundInfoAsyncpara mostrarListenableFuture(I85156). - RxWorker para RxJava 2 ahora tiene
getForegroundInfopara mostrarSingle, que se puede usar en lugar degetForegroundInfoAsyncque muestraListenableFuture(I21c91, b/203851459). - RxWorker para RxJava 3 ahora tiene
getForegroundInfopara mostrarSingle, que se puede usar en lugar degetForegroundInfoAsyncque muestraListenableFuture(I1ca8a). - RxWorker ahora tiene
setForegroundpara mostrarCompletableque se puede usar en lugar desetForegroundInfoAsyncpara mostrarListenableFuture(I992a3, b/203851459).
Correcciones de errores
- Se propagan las cancelaciones de
CoroutineScopeaListenableFuturecuando se usasuspendCancellableCoroutine(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
CoroutineScopese propagan aListenableFuturecuando se usasuspendCancellableCoroutine(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
@ExperimentalExpeditedWorkdebido 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 deListenableWorker.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
De WorkManager
2.6.0-alpha02: Se agregó compatibilidad con trabajadores que pueden ejecutarse en todos los procesos. (Iaf200)De WorkManager
2.6.0-alpha02: Se agregóRemoteCoroutineWorker, una implementación deRemoteListenableWorkerque puede vincularse a un proceso remoto. (I30578)
Cambios en la API
- De WorkManager
2.6.0-alpha02: Se agregó compatibilidad con la restricción de redTEMPORARILY_UNMETERED. (I08d5e) - De WorkManager
2.6.0-alpha02: Se agregó compatibilidad asetProgressAsync()con trabajadores de varios procesos. (Ib6d08) - De WorkManager
2.6.0-alpha02:WorkManagerInitializerahora es público para que otrosandroidx.startup.Initializerpuedan usarlos como dependencias. (I5ab11)
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
PendingIntentpara 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
WorkRequestcomo acelerados.Esta API reemplaza las API de
setForegroundAsync(...)ysetForeground(...)que ahora son obsoletas.Cuando usas
setExpedited(...), WorkManager delega los trabajos acelerados enJobSchedulera 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
WorkRequestacelerados.
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.startuppara inicializar WorkManager. Si usastetools:node="remove", el elementoContentProviderque 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
RemoteWorkManagerahora se desvincula deRemoteWorkManagerServicecorrectamente, lo que permite queRemoteWorkManagerServicese limpie de forma satisfactoria. aosp/1730694RemoteListenableWorkerahora se desvincula deRemoteWorkerServicecorrectamente, lo que permite queRemoteWorkerServicese limpie de forma satisfactoria. aosp/1743817- Ahora solo se ejecuta
ForceStopRunnableen 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 deRemoteListenableWorkerque 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) WorkManagerInitializerahora es público para que otrosandroidx.startup.Initializerpuedan 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
WorkManagerahora usaandroidx.startuppara inicializar WorkManager. Anteriormente, lo hacíaandroidx.work.impl.WorkManagerInitializer. (aosp/1608813)Si usaste
tools:node="remove", el elementoContentProviderque 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 eloutputDatade ListenableWorker. (Ie51e3)
Correcciones de errores
- Se agregó una solución para un error de OEM que provoca que se muestre un
SecurityExceptioncuando se usan las API deAlarmManager. (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-multiprocesspara 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 tusWorkRequest. RemoteWorkManager siempre se comunica con el proceso designado. El programador en proceso también se ejecuta en el proceso designado.
- Para usar
- A veces,
ActivityManagerno puede crear una instancia de la instanciaJobServicepara iniciar un trabajo. Esto provoca que el trabajo subyacente se descarte de manera silenciosa debido a un error de la plataforma.WorkManagerahora garantiza que haya trabajos de respaldo para cadaWorkRequestcuando se inicializa unApplicationmediante la conciliación de trabajos. Esto mejora la confiabilidad en la ejecución del trabajo. (b/172475041, aosp/1489577) WorkManagerlimita 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 deWorkRequest, después de que se completa unWorkRequest. Anteriormente, la duración era de7días, pero se redujo a1día, así como la duración de keepResultsForAtLeast. (aosp/1419708)- El objeto
TestListenableWorkerBuilderahora admite la clase reificada que extiendeListenableWorkerpara 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
getWorkInfosLiveDatano se invalidaba correctamente después de que las entidades se actualizaran cuando se usaba la API basada enWorkQuery. (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
NoSuchElementExceptioncuando se intentaba desvincular de un proceso muerto. (aosp/1530589) - Se mejoró
ConstraintTrackingWorkerpara detener un elementoListenableWorkersolo 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
WorkManagerlimita automáticamente la cantidad deWorkRequestque puede retirar el programador en proceso. Las solicitudes se siguen ejecutando en orden de llegada. (aosp/1455228)WorkManagerintenta 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 comoENQUEUEDinmediatamente 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
TestListenableWorkerBuilderyTestWorkerBuilderno usan tipos sin formato. (I883ad, b/169787349)
Correcciones de errores
- Usa
ApplicationInfopara determinar el nombre del proceso predeterminado de la app (b/168716641, aosp/1429950). - Corrige las reglas de visibilidad de
RemoteWorkManageryRemoteWorkContinuation. 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
idpara consultarWorkInfo. (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). ElprocessNamees un nombre de proceso completamente calificado que se parece apackageName:processName(p. ej.,com.example:remote). - Un conjunto de API nuevas: de
RemoteWorkManageryRemoteWorkContinuationa solicitudes de trabajo deenqueue,cancelyquery. Estas API no incluyen variantes deLiveDataa fin de evitar la contención de SQLite en múltiples procesos. Todas las llamadas aenqueue,cancelyqueryse envían a un procesoprimaryde la app mediante el AIDL y muestran un elementoListenableFuturefluido. (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713)
- 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
Cambios en la API
- WorkManager ahora elimina de forma más activa los elementos
WorkRequestcompletados que no tengan dependencias incompletas. La duración del búfer cambió de7días a1día. (aosp/1419708)
Correcciones de errores
- WorkManager ahora concilia los trabajos de forma proactiva, de modo que
WorkRequestyJobSchedulerestán sincronizados cuando se inicializaWorkManager. (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
WorkManageren el futuro. Mantente atento a las actualizaciones adicionales.
Correcciones de errores
- Controla
SecurityExceptioncuando se realiza un seguimiento del estado de la red en algunos dispositivos. (aosp/1396969)
Contribución externa
- Zac Sweers corrigió la documentación de
ArrayCreatingInputMerger(github/43).
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
WorkManagerahora tiene más capacidad. Anteriormente, elScheduleren proceso solo consideraba ejecutar trabajos no retrasados cuyas restricciones se cumplieron. Ahora, el programador en proceso realiza un seguimiento deWorkRequestque podrían ejecutarse en el futuro, incluso PeriodicWorkRequests. ElScheduleren proceso no observa los límites de programación (pero sigue estando restringido al tamaño delExecutorque 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,WorkManagertambién presenta un nuevoRunnableSchedulerconfigurable. (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
WorkInfomedianteWorkQuery. Esto es útil cuando los programadores quieren consultar lasWorkInfomediante una combinación de varios atributos. Para obtener más información, consultaWorkQuery.Builder.fromStates(...),WorkQuery.Builder. fromTags(...)oWorkQuery.Builder.fromUniqueWorkNames(...). (aosp/1253230, b/143847546) Se agregó la capacidad de solicitar información de diagnóstico de
WorkManagermediante 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 aAPPEND, pero reemplaza a una cadena con requisitos previos cancelados o fallidos (b/134613984, aosp/1199640).Se proporcionó la capacidad de agregar un
RunnableSchedulerpersonalizado 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_LOWcon 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
foregroundServiceTypecorrecto al utilizar las API desetForegroundAsync()(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
ListenableWorkerahora seanpubliccuando se usa elWorkerFactorypredeterminado (aosp/1291262).
- Uso de
Las llamadas a
setForegroundAsync()que no se completen antes de completar unListenableWorkerse señalizarán mediante unIllegalStateExceptionen la devolución deListenableFuture(aosp/1262743).Se corrigió un error por el que el objeto
ForegroundServiceno se detenía después de interrumpir un elementoWorkeren primer plano (b/155579898, aosp/1302153).Se corrigió un error por el que el objeto
WorkManagerintenta ejecutar varias instancias de un elementoWorkervinculado 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
ForegroundServiceno se detenía después de interrumpir un elementoWorkeren primer plano (b/155579898, aosp/1302153). - Se corrigió un error por el que el objeto
WorkManagerintenta ejecutar varias instancias de un elementoWorkervinculado 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_LOWcon 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
ListenableWorkerahora seanpubliccuando se usa elWorkerFactorypredeterminado (aosp/1291262).
Cambios en la API
- Llamar a
setProgressAsync()después de que unListenableWorkerhaya finalizado la ejecución indicará unaExceptiona través deListenableFuture(aosp/1285494). WorkQuery.Builderahora está marcado comofinal(aosp/1275037).- Se cambió el nombre de los métodos de fábrica
withStates,withTagsywithUniqueWorkNamesdeWorkQuery.BuilderporfromStates,fromTagsyfromUniqueWorkNames, respectivamente. (aosp/1280287)
Correcciones de errores
- Se debe ignorar
SecurityExceptioncuando 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
WorkRequestrequierenConstraints.setRequiresCharging(...)yConstraints.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
WorkInfomedianteWorkQuery. Esto es útil cuando los programadores quieren consultar lasWorkInfomediante una combinación de varios atributos. Para obtener más información, consultaWorkQuery.Builder withStates(...),WorkQuery.Builder withTags(...)oWorkQuery.Builder withUniqueWorkNames(...). (aosp/1253230, b/143847546)Las llamadas a
setForegroundAsync()que no se completen antes de completar unListenableWorkerse señalizarán mediante unIllegalStateExceptionen la devolución deListenableFuture(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
WorkManagerahora 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 lasWorkRequestque se podrían ejecutar en el futuro, incluidas lasPeriodicWorkRequest. Asimismo, el programador en proceso no observa los límites de programación (pero sigue estando restringido al tamaño deExecutorque usa WorkManager). Esto significa que la aplicación ahora puede ejecutar muchas másWorkRequestcuando 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
foregroundServiceTypecorrecto al utilizar las API desetForegroundAsync()(b/147873061, aosp/1215915). - Especificación de los ID de
JobSchedulerque debería usarWorkManageral utilizar las API deJobServicedirectamente. (aosp/1223567)
- Uso de
Cambios en la API
Se agregó
ExistingWorkPolicy.APPEND_OR_REPLACE, que es similar aAPPEND, pero reemplaza a una cadena con requisitos previos cancelados o fallidos (b/134613984, aosp/1199640).Se proporcionó la capacidad de agregar un
RunnableSchedulerpersonalizado para realizar un seguimiento de lasWorkRequestque se deben ejecutar en el futuro. El programador en proceso utiliza esta capacidad. (aosp/1203944)
Correcciones de errores
setProgress()dejó de estar disponible enRxWorkerporque antes mostrabaSingle<Void>, un tipo imposible. Se agregó una nueva API desetCompletableProgress(), que muestraCompletableen 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
Workerde larga duración después de exceder el período de ejecución de 10 minutos (aosp/1247484, b/150553353). - Solución de
IssueRegistryde 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
Notificationpara losWorkerde larga duración que se ejecutan cuando se encuentra activo unServiceen primer plano (aosp/1218539, b/147249312). WorkManagerahora depende de una forma estable deandroidx.sqlite:sqlite-framework:2.1.0(aosp/1217729).- Se agregaron reglas de lint para garantizar que se especifique un
foregroundServiceTypeenAndroidManifest.xmlcuando se usan losforegroundServiceTypeenForegroundInfo. (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-testingahora define una dependencia deapienwork-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.WorkManagerInitializerdeAndroidManifest.xmlcuando se usa la inicialización a pedido (aosp/1167007). - Se agregó una advertencia de lint cuando se usa
enqueue()para unaPeriodicWorkRequesten lugar deenqueueUniquePeriodicWork(). (aosp/1166032)
Cambios en la API
ForegroundInfoahora requiere que se especifique elnotificationIdque se usará cuando utilicesListenableWorker.setForegroundAsync(). Este es un cambio rotundo. De este modo, puedes ejecutar variosWorkerde ejecución prolongada en paralelo.WorkManagertambién administra mejor la duración de lasNotificationproporcionadas. (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
WorkRequestprovocaba la compilación de una cadenaWorkContinuationincorrecta. (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.Providercuando 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 deWorkRequestsin tener que registrar otro componente enAndroidManifest.xml. Esta API hace que cancelarWorkRequestdesdeNotificationsea 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.0estable.
Cambios en la API
- Se cambió el nombre de
ForegroundInfo.getNotificationType()porForegroundInfo.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()(oCoroutineWorker#setForeground(), para Kotlin) (aosp/1133636).
Cambios en la API
- El nombre de la API de
containsKeyenDatase cambia porhasKeyWithValueOfType. También se cambió el nombre del método de extensión correspondiente en la bibliotecaktx(b/141916545).
Correcciones de errores
- La agenda de WorkManager funciona bastante bien cuando la cantidad de
WorkRequesten 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).
Dataahora tiene una representacióntoString()mucho más útil (b/140945323).Dataahora tiene un mejor métodoequals(). También es admitedeepEqualspara los tiposArray(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
ListenableWorkerahora pueden establecer el progreso por medio de la APIsetProgressAsync(). También se agregó una APIsuspenddesetProgresscorrespondiente enCoroutineWorkery unsetProgressenRxWorkerque muestra unSingle<Void>. Con estas nuevas API, los trabajadores pueden transmitir información de progreso por medio deWorkInfo, que tiene una APIgetProgresscorrespondiente (b/79481554).Datatiene una APIcontainsKey()que se puede usar para validar que los datos de entrada enWorkertengan claves del tipo esperado (b/117136838).Dataahora se puede serializar conData.toByteArray()yData.fromByteArray(). Ten en cuenta que no hay ninguna garantía para el control de versiones conData, 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
InputMergerFactorypor medio deConfiguration.setInputMergerFactory(b/133273159).
Cambios en la API
- WorkManager lanzará una instancia de
IllegalStateExceptionsi unWorkerFactorymuestra una instancia deListenableWorkerque se invocó anteriormente (b/139554406). - La documentación se actualiza en torno a la cancelación de
ListenableFuturey la devolución de llamada deonStopped()enListenableWorker(b/138413671).
Correcciones de errores
- El programador en proceso ahora omite
WorkRequestcon la restricciónidle. Ahora soloJobSchedulerrecoge estas solicitudes cuando el dispositivo en realidad estáidle(aosp/1089779). TestSchedulerahora usa correctamente elExecutorespecificado 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
NullPointerExceptioncuando se usan las APIJobScheduleren 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-beta01es 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
IllegalArgumentExceptioncuando 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-ktxahora requiere Java 8. Si te encuentras con algún error, puedes agregar lo siguiente a tubuild.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:
- Inhabilita el inicializador automático.
- Implementa
Configuration.Provideren tu objetoApplicationpersonalizado. - Cambia todas las referencias de
WorkManager.getInstance()aWorkManager.getInstance(Context). Como parte de este cambio, se dio de bajaWorkManager.getInstance(). Siempre es más seguro llamar al nuevo reemplazo deWorkManager.getInstance(Context), incluso si no estás realizando la inicialización a pedido.
PeriodicWorkRequestahora admite retrasos iniciales. Puedes usar el métodosetInitialDelayenPeriodicWorkRequest.Builderpara establecer un retraso inicial (b/111404867).- Se agregó la capacidad de delegar a una o más
WorkerFactoryregistradas medianteDelegatingWorkerFactory. (b/131435993). - Se agregó la capacidad de personalizar el
Executorque usa WorkManager para todo el mantenimiento de registros interno a través deConfiguration.Builder.setTaskExecutor. - Se agregó la capacidad de crear clases
WorkeryListenableWorkercomprobables por unidad medianteTestWorkerBuilderyTestListenableWorkerBuilderen el artefactowork-testing.- Ten en cuenta que
work-testingahora solicita a Kotlin como una dependencia e incluye varias extensiones de Kotlin de forma predeterminada.
- Ten en cuenta que
- Se agregó el número de intentos de ejecución a
WorkInfo(b/127290461). - Ahora, los tipos de
Datapueden almacenar y recuperar bytes y arreglos de bytes. Esto NO cambia el tamaño máximo de los objetos deData. - 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
JobSchedulermientras 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,
TestListenableWorkerBuilderusa elWorkerFactorycorrecto al crear instancias deListenableWorker(b/135275844). - Se corrigió un error que producía desvíos en las ventanas de ejecución para
WorkRequestdebido 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,
WorkManagerTestInitHelperusa 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
JobScheduleral 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
PeriodicWorkRequestahora admite retrasos iniciales. Puedes usar el métodosetInitialDelayenPeriodicWorkRequest.Builderpara establecer un retraso inicial (b/111404867).Se agregó la capacidad de delegar a una o más
WorkerFactoryregistradas medianteDelegatingWorkerFactory. (b/131435993).Se agregó la capacidad de personalizar el
Executorque usa WorkManager para todo el mantenimiento de registros interno a través deConfiguration.Builder.setTaskExecutor.Se amplió la documentación sobre
WorkRequest.keepResultsForAtLeast(b/130638001), la inicialización a pedido yPeriodicWorkRequest.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:
- Inhabilita el inicializador automático.
- Implementa
Configuration.Provideren tu objetoApplicationpersonalizado. - Cambia todas las referencias de
WorkManager.getInstance()aWorkManager.getInstance(Context). Como parte de este cambio, se dio de bajaWorkManager.getInstance(). Siempre es más seguro llamar al nuevo reemplazo deWorkManager.getInstance(Context), incluso si no estás realizando la inicialización a pedido.
- Se agregó la capacidad de crear clases
WorkeryListenableWorkercomprobables por unidad medianteTestWorkerBuilderyTestListenableWorkerBuilderen el artefactowork-testing.- Ten en cuenta que
work-testingahora solicita a Kotlin como una dependencia e incluye varias extensiones de Kotlin de forma predeterminada.
- Ten en cuenta que
- Se agregó el número de intentos de ejecución a
WorkInfo(b/127290461). - Ahora, los tipos de
Datapueden almacenar y recuperar bytes y arreglos de bytes. Esto NO cambia el tamaño máximo de los objetos deData. - Se dio de baja
CoroutineWorker.coroutineContext. Este campo se escribió incorrectamente comoCoroutineDispatcher; 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()yRxWorker.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
StackOverflowErrorrelacionado con cadenas de trabajo largas (b/129091233). - Se actualizó la documentación de
PeriodicWorkRequestpara 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
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
StackOverflowErrorrelacionado 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
Workerahora están programados correctamente después de una falla de la aplicación (b/124546316).Los
Workerque arrojan unaExceptionsin marcar ahora se marcan correctamente comoFAILEDy 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
flexpara 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
NullPointerExceptionen 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-beta02que 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
ConcurrentModificationExceptionen dispositivos que ejecutan Android 5.1 (API nivel 22) o versiones anteriores. Esta es una continuación de la corrección de1.0.0-beta02. (b/121345393). - Se agregó
exported=falsepara 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
ConcurrentModificationExceptionen 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
LiveDatautilizadas por WorkManager. - Se decidió usar la dependencia
1.1.1deRoomen lugar de la1.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.Resulta una clase interna deListenableWorker. De esta manera, se evitan los conflictos de restructuración con la clase de nivel principal de KotlinResult. Esto es un cambio rotundo en materia de API (b/120564418).
Cambios rotundos en la API
androidx.work.Resultse movió a una clase interna deListenableWorker.
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, introduceRxWorker. Este es unListenableWorkerque espera unaSingle<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-firebaseya no se actualizará en preparación para la versión Beta. En el futuro, agregaremos una alternativa. Payloadse integró aResult. Ahora,Resultes una "clase sellada" con tres implementaciones concretas, que puedes obtener medianteResult.success()(oResult.success(Data)),Result.failure()(oResult.failure(Data)) yResult.retry(). El resultado deListenableFutureahora esResult, en lugar dePayload. La claseWorkerno tiene métodos de captador y establecedor para el resultadoData. Este es un cambio rotundo.- Se agregaron
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)yConstraints.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()yListenableFuture.await(). - Se cambió el nombre de
Operation.getException()porOperation.getThrowable(). Este es un cambio rotundo. - La clase
ContentUriTriggersy 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,WorkContinuationyOneTimeWorkRequestpara optimizar la API. Para solucionar los problemas de compilación, puedes unir tus varargs existentes conArrays.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étodoscombineexistentes 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
LiveDatamediante WorkManager que se observa a través deobserveForever. 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áWorkInfocon elCANCELLEDStateduranteListenableWorker.onStopped(). - Los
nullResultse considerarán errores enListenableWorker. 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-firebaseya no se actualizará en preparación para la versión Beta. En el futuro, agregaremos una alternativa. Payloadse integró aResult. Ahora,Resultes una "clase sellada" con tres implementaciones concretas, que puedes obtener medianteResult.success()(oResult.success(Data)),Result.failure()(oResult.failure(Data)) yResult.retry(). El resultado deListenableFutureahora esResult, en lugar dePayload. La claseWorkerno tiene métodos de captador y establecedor para el resultadoData.- Se agregaron los métodos de extensión de Kotlin
Operation.await()yListenableFuture.await(). - Se cambió el nombre de
Operation.getException()porOperation.getThrowable(). - La clase
ContentUriTriggersy 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,WorkContinuationyOneTimeWorkRequestpara optimizar la API. Para solucionar los problemas de compilación, puedes unir tus varargs existentes conArrays.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étodoscombineexistentes 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-ktxintroduce un nuevoCoroutineWorker. - El nombre de
WorkStatusse cambió aWorkInfo. Todas las variantes correspondientes del métodogetStatuscambiaron de nombre por las variantesgetWorkInfocorrespondientes. Este es un cambio rotundo. ListenableWorker.onStopped()ya no acepta un argumento booleano que representa siWorkRequestse canceló.WorkManagerya no hace esta distinción. Este es un cambio rotundo.- El nombre del paquete
androidx.work.testcambió porandroidx.work.testing. Este es un cambio rotundo. - Los establecedores en
Constraintsya no forman parte de la API pública. Este es un cambio rotundo. - Anteriormente,
WorkerParameters.getTriggeredContentUris()yWorkerParameters.getTriggeredContentAuthorities()mostraban arreglos. Ahora estos métodos muestran Collections. Este es un cambio rotundo. - El nombre de
ListenableWorker.onStartWork()cambió porListenableWorker.startWork(). Este es un cambio rotundo. - El constructor de
WorkStatusya no forma parte de la API pública. Este es un cambio rotundo. - Los nombres de
Configuration.getMaxJobSchedulerID()yConfiguration.getMinJobSchedulerID()se cambiaron aConfiguration.getMinJobSchedulerId()yConfiguration.getMaxJobSchedulerId(), respectivamente. Este es un cambio rotundo. - Se agregaron muchas anotaciones
@NonNulla la API pública para mejorar su ergonomía. - Se agregó la API
WorkManager.enqueueUniqueWork()para poner en cola elementosOneTimeWorkRequestúnicos sin tener que crearWorkContinuation. - Ahora todas las variantes de los métodos
enqueueycancelenWorkManagermuestran un nuevo tipo deOperation. Este es un cambio rotundo. - Todas las variantes de
enqueueya no aceptan varargs paraWorkRequest. Este es un cambio rotundo. Usa Collections en su lugar. Puedes usarArrays.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
initializedeWorkManagerque se repitan más de una vez por proceso darán como resultadoIllegalStateException. Este es un cambio rotundo.
Correcciones de errores
- Ahora, los elementos
WorkRequest.Builderen el artefactowork-runtime-ktxusanListenableWorker. Correcciones b/117666259. - Asegúrate de que el próximo tiempo de ejecución de
PeriodicWorksea 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
WorkStatusse cambió aWorkInfo. Todas las variantes correspondientes del métodogetStatuscambiaron de nombre por las variantesgetWorkInfocorrespondientes. ListenableWorker.onStopped()ya no acepta un argumento booleano que indique si se cancelóWorkRequest.WorkManagerya no hace esta distinción.- El nombre del paquete
androidx.work.testcambió porandroidx.work.testing. - Los establecedores en
Constraintsya no forman parte de la API pública. - Anteriormente,
WorkerParameters.getTriggeredContentUris()yWorkerParameters.getTriggeredContentAuthorities()mostraban arreglos. Ahora estos métodos muestran Collections. - El nombre de
ListenableWorker.onStartWork()cambió porListenableWorker.startWork(). - El constructor de
WorkStatusya no forma parte de la API pública. - Los nombres de
Configuration.getMaxJobSchedulerID()yConfiguration.getMinJobSchedulerID()se cambiaron aConfiguration.getMinJobSchedulerId()yConfiguration.getMaxJobSchedulerId(), respectivamente. - Ahora, todas las variantes de los métodos
enqueueycancelenWorkManagermuestran un nuevo tipo deOperation. - Todas las variantes de
enqueueya no aceptan varargs paraWorkRequest. - Ahora, los intentos de
initializedeWorkManagerque se repitan más de una vez por proceso darán como resultadoIllegalStateException.
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 constructorWorkerpredeterminado. Esto es un cambio rotundo en materia de API. - El nombre de
NonBlockingWorkerse cambió porListenableWorker, que ahora es una clase pública visible lista para usar.ListenableWorkerproporciona 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, actualizaListenableFuturesegún corresponda. Las implementaciones de referencia deListenableFuturese proporcionan en el paqueteFuturesenalpha02(consulta la secciónWorkManagera continuación).WorkerextiendeListenableWorkery sigue funcionando como antes, con un métodoResult doWork()abstracto.- Algunos métodos y miembros cambiaron de
WorkeraListenableWorker. - Pronto proporcionaremos implementaciones de referencia para
ListenableWorkerque usan corrutinas de Kotlin (una vez que se hayan lanzado las versiones estables) y RxJava2.
- La interfaz
WorkerFactoryy la implementación concretaDefaultWorkerFactoryse fusionaron en una clase abstracta llamadaWorkerFactory. La implementación garantiza que el comportamiento predeterminado basado en reflexiones se invocará como un último esfuerzo para cualquier instanciaWorkerFactorycreada por el usuario. Este es un cambio rotundo. - Se quitaron
WorkManager.synchronous()yWorkContinuation.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
ListenableFuturepara obtener y observar de manera asíncrona. Por ejemplo, se usóWorkManager.enqueue()para mostrarvoidy ahora muestraListenableFuture<Void>. Puedes llamar aListenableFuture.addListener(Runnable, Executor)oListenableFuture.get()para ejecutar código cuando se complete la operación. - Ten en cuenta que
ListenableFutureno 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 deFuture. - Para mantener la paridad con los métodos
getStatus*síncronos, proporcionamos variantesListenableFuturey cambiamos el nombre de los métodos existentes que mostrabanLiveDatapara que "LiveData" forme parte del nombre de manera explícita (por ejemplo,getStatusesByIdLiveData(UUID)). Esto es un cambio rotundo en materia de API.
- Ahora puedes usar
Correcciones de errores
- Se corrigió el error conocido de alpha09 en relación con los archivos
androidx-annotations.produplicados. Puedes quitar la solución alternativa de las notas de la versión anteriores. Para ello, borraexclude 'META-INF/proguard/androidx-annotations.pro'del archivo Gradle. - Se agregaron configuraciones de ProGuard para mantener el constructor
Workernuevo. b/116296569 - Se corrigió una posible excepción
NullPointerExceptionen una condición de carrera en la que el trabajo fueREPLACE(b/116253486 y b/116677275). - Ahora,
WorkContinuation.combine()acepta un elementoWorkContinuationo 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 constructorWorkerpredeterminado. - La interfaz
WorkerFactoryy la implementación concretaDefaultWorkerFactoryse fusionaron en una clase abstracta llamadaWorkerFactory. - Se quitaron
WorkManager.synchronous()yWorkContinuation.synchronous(). - Los métodos
WorkManager.getStatus*()ahora muestranListenableFuture. El elementoWorkManager.getStatus*LiveData()muestraLiveData.
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)alWorkersubyacente. 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
LiveDataa nivel interno.
Cambios en la API
- Para crear tus propias instancias de
Workeren el tiempo de ejecución, ahora puedes especificar unaWorkerFactorycomo parte deWorkManager.Configuration. La fábrica de resguardo esDefaultWorkerFactory, lo que coincide con el comportamiento de versiones anteriores de WorkManager.- Ahora, los constructores predeterminados para
WorkeryNonBlockingWorkerahora identificados como obsoletos. Usa el nuevo constructor (Worker(Context, WorkerParameters)) y llama asuper(Context, WorkerParameters). Las versiones futuras de WorkManager quitarán el constructor predeterminado.
- Ahora, los constructores predeterminados para
- Comenzamos a usar el nuevo artefacto
ListenableFuturede manera interna (sin dependencias de Guava). Implementaremos ListenableFutures a la API en las próximas versiones. Este cambio permitirá que se muestreNonBlockingWorkereventualmente. - Agrega la capacidad de activar tareas programadas en
TestDrivermedianteTestDriver.setInitialDelayMet(UUID)yTestDriver.setPeriodDelayMet(UUID). (b/113360060).
Cambios rotundos
- Los constructores predeterminados
WorkeryNonBlockingWorkerdejaron 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
Datapara 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 deJobScheduler(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
ConcurrentModificationExceptionenConstraintTracker. b/112272753 - Se cambiaron las anotaciones de tipo de datos que se muestra de
Data.getBooleanArray(String)yData.getIntArray(String)por@Nullable, en lugar de@NonNull. (b/112275229).
Cambios en la API
- Ahora,
Workerextiende una clase nueva,NonBlockingWorker. Esto no afecta ningún uso actual. En el futuro,NonBlockingWorkerse 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)yData.getIntArray(String)por@Nullable, en lugar de@NonNull. b/112275229 - Extensiones de Kotlin:
Map.toWorkData()dejó de estar disponible y agregó un elementoworkDataOf(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
PeriodicWorkno 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
WorkManagerfallara. googlecodelabs/android-workmanager/issues/56. - Se crearon objetos
WorkRequestúnicos durante el uso deWorkRequest.Builder#build(). b/111408337 - Se habilitó el uso de
RescheduleReceiversolo cuando hay objetosWorkRequestque 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á unaIllegalStateException. 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 registraLog.INFOy versiones superiores. - Se cambió la firma de
Data.getString()de manera que ya no toma un valor predeterminado (esnullde manera implícita). Esto es un cambio rotundo en materia de API. - Se identificaron como
@hidealgunos métodos que solo se necesitan para uso interno. Se incluye al constructorConstraints,Data.toByteArray()yData.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
PeriodicWorkRequestal usarJobScheduler. b/110798652 - Se corrigió un problema con objetos
PeriodicWorkRequestque 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
BroadcastReceiverque 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 laWorkRequestdeterminada. (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 (esnullde manera implícita). - Se identificaron como
@hidealgunos métodos que solo se necesitan para uso interno. Esto incluye al constructorConstraints,Data.toByteArray()yData.fromByteArray(byte[]).
Versión 1.0.0-alpha04
26 de junio de 2018
Correcciones de errores
- Ahora los elementos
PeriodicWorkRequestse reprogramaron correctamente para el uso de la implementación basada enAlarmManager. - 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
JobSchedulerdespué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/109572353Se corrigieron las advertencias del compilador Kotlin durante el uso de la dependencia
work-runtime-ktx.Ahora, WorkManager usa
Roomversión1.1.1-rc1.
Cambios en la API
- Se agregó
getStatusesSync(), la versión síncrona deWorkContinuation.getStatuses(). Workerpermite distinguir entre una cancelación iniciada por el usuario y una detención temporaria solicitada por el SO. El elementoWorker.isStopped()muestratruesi se solicitó algún tipo de detención.Worker.isCancelled()muestratruecuando 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 aJobScheduleroAlarmManager. Esto ayuda a evitar queWorkManagertome todos los espacios deJobSchedulerdisponibles. - Se agregó
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), que ayuda a definir un rango de ID de tarea deJobSchedulerpara que useWorkManager(b/79996760). Worker.getRunAttemptCount()muestra el recuento de ejecución actual de un objetoWorkerdeterminado. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)te permite poner en cola un elementoPeriodicWorkRequestúnico. b/79600647WorkManager.cancelAllWork()cancela todos los elementosWorker. Las bibliotecas que dependen deWorkManagerpueden consultar cuándo se llamó a este método por última vez. Para ello, pueden utilizarWorkManager.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 elementoWorker. Esto permite quitar objetosWorkRequestsintago cuando elidno está disponible (b/109572351).
Cambios rotundos
- Se cambió el nombre de
Worker.WorkerResultporWorker.Result. Worker.onStoppedahora tiene un parámetro adicionalisCancelledconfigurado entruecuando el elementoWorkerse canceló de manera explícita.
Versión 1.0.0-alpha02
24 de mayo de 2018
Correcciones de errores
- Se corrigió una
NullPointerExceptionenState.isFinished(). b/79550068 - Se corrigió un problema que ocasionaba que los objetos
Workerse reprogramaran enApplication.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
Workeral subproceso en segundo plano. - Ahora, la implementación de
AlarmManagerse 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
floatenData. b/79443878 - Ahora,
Data.Builder.putAll()muestra una instancia deBuilder. b/79699162 - Más Javadoc y correcciones en la documentación. b/79691663
Cambios en la API
- Los elementos
Workerpueden reaccionar a una detención. Se puede usarWorker.isStopped()para verificar si se detuvo un elementoWorker. Se puede usarWorker.onStopped()para realizar operaciones de limpieza livianas. - La API
Worker.getTags()muestra unSetde etiquetas asociadas con el elementoWorker. - Se agregaron sobrecargas de
javax.time.Durationpara API que usan una combinación de duración yTimeUnit. Esto lo supervisa@RequiresApi(26). - Las extensiones de
WorkManagerse trasladaron del paqueteandroidx.work.ktxal paqueteandroidx.work. Las extensiones anteriores dejaron de estar disponibles y se quitarán en una versión futura. Configuration.withExecutor()ya no está disponible. UsaConfiguration.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.