WorkManager
Atualização mais recente | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
30 de outubro de 2024 | 2.9.1 | - | - | - |
Como declarar dependências
Para adicionar uma dependência ao WorkManager, é preciso adicionar o repositório Maven do Google ao seu projeto.
Adicione as dependências dos artefatos necessários no arquivo build.gradle
para
seu app ou módulo:
Groovy
dependencies { def work_version = "2.9.1" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Kotlin
dependencies { val work_version = "2.9.1" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
Para ver mais informações sobre o uso de extensões Kotlin, consulte a documentação do Android KTX.
Para ver mais informações sobre dependências, consulte Adicionar dependências de build.
Feedback
Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.
Consulte a documentação do Issue Tracker para saber mais.
Versão 2.10
Versão 2.10.0
30 de outubro de 2024
Lançamento de androidx.work:work-*:2.10.0
. A versão 2.10.0 contém estas confirmações.
Mudanças significativas desde a versão 2.9.1
- Foram adicionadas tags de rastreamento a jobs de
WorkManager
, o que torna o "adb shell dumpsys jobscheduler" muito mais fácil de entender, já que ele vai conter o nome do worker que está sendo executado. Seções de trace também são adicionadas em torno das principais áreas deWorkManager
. Configuration.workerCoroutineContext
foi adicionado para controlar o gerenciador de despacho em queCoroutineWorker
é executado.- Os desenvolvedores podem especificar
NetworkRequest
como uma restrição para um worker usando o métodoConstraints.setRequiredNetworkRequest
. Isso permite um controle mais granular da rede em que esse worker deve ser executado. - O
WorkManager
2.10.0 agora é compilado com o SDK 35 e contém várias mudanças para compatibilidade com o SDK 35.
Versão 2.10.0-rc01
24 de outubro de 2024
Lançamento de androidx.work:work-*:2.10.0-rc01
. A versão 2.10.0-rc01 contém estas confirmações.
Versão 2.10.0-beta01
2 de outubro de 2024
Lançamento de androidx.work:work-*:2.10.0-beta01
. A versão 2.10.0-beta01 contém estas confirmações.
Versão 2.10.0-alpha04
18 de setembro de 2024
Lançamento de androidx.work:work-*:2.10.0-alpha04
. A versão 2.10.0-alpha04 contém estas confirmações.
Mudanças na API
- Adição do motivo da interrupção
STOP_REASON_FOREGROUND_SERVICE_TIMEOUT
para quando um worker em primeiro plano é interrompido devido ao tempo limite de execução com base no tipo de serviço em primeiro plano. (Ibd0af).
Versão 2.10.0-alpha03
4 de setembro de 2024
Lançamento de androidx.work:work-*:2.10.0-alpha03
. A versão 2.10.0-alpha03 contém estas confirmações.
Novos recursos
- Foram adicionadas tags de rastreamento aos jobs de
WorkManager
, o que torna o "adb shell dumpsys jobscheduler" muito mais simples de entender, porque conterão o nome do worker que está sendo executado. Seções de rastreamento também são adicionadas em torno de áreas importantes deWorkManager
.
Mudanças na API
- O WorkManager 2.10.0 agora é compilado com o SDK 35.
- Correção de workers em primeiro plano do tipo "serviço curto" e "sincronização de dados" que expiram e causam um ANR quando
WorkManager
não chamastopSelf()
. Essa correção se aplica apenas a dispositivos com a API 34 e 35, em que os tipos de serviço em primeiro plano foram introduzidos. (ca06b2, b/364508145). - Novas APIs
WorkerParameters
que possibilitam alternar o processo remoto a que oWorker
se vincula ao usar umWorkerFactory
. (Ibdc8a, Ie8a90, I7373f).
Correções de bugs
- Correção de uma falha causada por
WorkManager
ao tentar reiniciar um worker de longa duração (ou seja, um worker em primeiro plano) quando o tipo em primeiro plano do trabalho tinha permissões pré-requisito do Android 14 que foram revogadas. (b/333957914). - Remoção da descrição manual do acesso às novas APIs da plataforma, já que isso acontece automaticamente pela modelagem de API ao usar o R8 com o AGP 7.3 ou mais recente (por exemplo, o R8 versão 3.3) e para todos os builds ao usar o AGP 8.1 ou mais recente (por exemplo, o D8 versão 8.1). Os clientes que não estão usando o AGP precisam fazer upgrade para a versão 8.1 ou mais recente do D8. Veja mais detalhes neste artigo. (Ia60e0, b/345472586).
Versão 2.10.0-alpha02
17 de abril de 2024
Lançamento de androidx.work:work-*:2.10.0-alpha02
. A versão 2.10.0-alpha02 contém estas confirmações.
Mudanças na API
- Foi adicionada a capacidade de emitir intervalos de rastreamento usando um
Tracer
@RestrictTo
configurável emWorkManager
. (I17d7f, b/260214125). Configuration.workerCoroutineContext
foi adicionado para para o controle do agente ondeCoroutineWorker
é executado. Isso ajuda a evitar completamente o uso deDispatchers.Default
emWorkManager
. (Icd1b7).- Foram adicionados gerenciadores de exceções personalizados para Workers (Ib1b74, b/261190695).
OneTimeWorkRequest.Builder
ePeriodicWorkRequest.Builder
agora podem ser construídos comKClass
em vez deClass
:val request = OneTimeWorkRequest.Builder(Worker::class).setConstraints(...).build()
(Ib55f6).- A classe
WorkManager
foi migrada para o Kotlin. Agora, os métodos que retornamLiveData
,ListenableFuture
ouFlow
fornecem informações de nulidade corretas. Se as suposições de nulidade desse código estivessem incorretas, seria preciso fazer alterações no código-fonte dos clientes. (If6757).
Versão 2.10.0-alpha01
24 de janeiro de 2024
Lançamento de androidx.work:work-*:2.10.0-alpha01
. A versão 2.10.0-alpha01 contém estas confirmações.
Novos recursos
- Os desenvolvedores podem especificar
NetworkRequest
como uma restrição para um worker usando o métodoConstraints.setRequiredNetworkRequest
. Isso permite um controle mais granular sobre qual rede esse worker precisa executar.
Mudanças na API
- Foi adicionada a capacidade de especificar
NetworkRequest
como a restrição. (Id98a1, b/280634452).
Versão 2.9
Versão 2.9.1
7 de agosto de 2024
Lançamento de androidx.work:work-*:2.9.1
. A versão 2.9.1 contém estas confirmações.
Correções de bugs
- Foi corrigida uma falha causada pela tentativa de
WorkManager
ao reiniciar um worker de longa duração (ou seja, um worker em primeiro plano) quando o tipo de trabalho em primeiro plano tinha permissões de pré-requisito do Android 14 que foram revogadas (b/333957914).
Versão 2.9.0
29 de novembro de 2023
Lançamento de androidx.work:work-*:2.9.0
. A versão 2.9.0 contém estas confirmações.
Mudanças importantes desde a versão 2.8.0
- Observabilidade por
Flow
s. Em vez deLiveData
, o progresso do worker agora pode ser observado pelo Flow viaWorkManager.getWorkInfosFlow
e métodos semelhantes - Agora,
WorkManager
fornece uma dica sobre por que um worker foi interrompido anteriormente. Ele pode ser consultado de um próprio worker por meio do métodogetStopReason()
ou deWorkInfo
viagetStopReason()
. - Programação precisa de workers periódicos usando
setNextScheduleTimeOverride
. Isso permite o cálculo dinâmico do próximo cronograma de trabalho periódico, que pode ser usado para implementar recursos avançados, como tempos de atualização adaptativa, comportamento de repetição personalizado ou a execução de um worker do feed de notícias antes que o usuário acorde todas as manhãs sem desvio. OExistingPeriodicWorkPolicy.UPDATE
deve ser usado com essas técnicas para evitar o cancelamento de um worker em execução enquanto o próximo é programado. - Testes do WorkManager com linhas de execução correspondentes na produção.
ExecutorsMode.PRESERVE_EXECUTORS
pode ser usado eminitializeTestWorkManager
para preservar os executores definidos emConfiguration
e usar a linha de execução principal real. - As APIs de corrotinas, como
CoroutineWorker
, foram movidas do artefato work-runtime-ktx adicional para o artefato principal work-runtime. O work-runtime-ktx agora está vazio.
Mudanças na API
stopReason
foi adicionado aWorkInfo
. Ele disponibilizastopReason
depois que o worker é executado. Ele pode ser útil para informarstopReason
de uma maneira útil, porque, depois que um worker é interrompido, um app pode ser encerrado muito rapidamente. (I21386).- Permitir que
Clock
seja definido pela configuração e usado para direcionar a sequência de execução dos testes do worker. (Ic586e). - O método
getStopReason()
foi adicionado aListenableWorker
, que dá uma dica sobre por que o worker foi interrompido. (I07060). WorkManagerTestInitHelper#closeWorkDatabase()
foi adicionado para evitar o aviso do Closeguard sobre recursos com vazamento. (Ia8d49).- O construtor de
WorkInfo
agora é público, o que pode ser útil nos testes. (Ia00b6, b/209145335). - O
work-runtime-ktx
agora está vazio, eCoroutineWorker
e outros utilitários específicos do Kotlin estão disponíveis no artefato de execução de trabalho principal. (I71a9a). - O método
setNextScheduleTimeOverride
foi adicionado, o que permite a configuração precisa de programações de trabalho periódicas (I3b4da). getNextScheduleTimeMillis
foi adicionado para receber informações sobre o tempo de execução programado e foi adicionado aWorkInfo
. (I797e4).- As informações de periodicidade e atraso inicial são adicionadas a
WorkInfo
. (I52f2f). - Adição de um método para observar workers usando fluxos com os métodos
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a). - Anotações
@RequiresApi(...)
ausentes foram adicionadas aos construtores e propriedades deConstraints
Agora, elas estão alinhadas às anotações correspondentes em setters noConstraints.Builder
que existiam nas versões anteriores doWorkManager
. (I6d7d2). - O
WorkManager
agora tem um limite separado para workers de uri de conteúdo para garantir slots emJobScheduler
e evitar que as atualizações de conteúdo sejam perdidas devido à alta carga. O limite pode ser configurado usandoConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f). - As restrições foram adicionadas a
WorkInfo
. (I162c0).
Versão 2.9.0-rc01
18 de outubro de 2023
Lançamento de androidx.work:work-*:2.9.0-rc01
. A versão 2.9.0-rc01 contém estas confirmações.
- Nenhuma mudança desde a última versão Beta
Versão 2.9.0-beta01
6 de setembro de 2023
Lançamento de androidx.work:work-*:2.9.0-beta01
. A versão 2.9.0-beta01 contém estas confirmações.
Mudanças na API
- Adição de constantes para os motivos de parada retornados por
WorkInfo.stopReason
eListenableWorker.stopReason
(I0cc00).
Versão 2.9.0-alpha02
26 de julho de 2023
Lançamento de androidx.work:work-*:2.9.0-alpha02
. A versão 2.9.0-alpha02 contém estas confirmações.
Novos recursos
- Agora,
WorkManager
fornece uma dica sobre por que um worker foi interrompido anteriormente. Ele pode ser consultado de um worker pelo métodogetStopReason()
ou deWorkInfo
porgetStopReason()
.
Mudanças na API
stopReason
foi adicionado aWorkInfo
. Ele disponibilizastopReason
depois que o worker é executado. Isso pode ser útil para informarstopReason
de forma útil, porque, depois que um worker é interrompido, um app pode ser encerrado muito rapidamente. (I21386).- Permitir que o relógio seja definido pela configuração e usado para direcionar a sequência de execução dos testes do worker. (Ic586e).
- O método
getStopReason()
foi adicionado aListenableWorker
, o que dá uma dica sobre o motivo da interrupção do worker. (I07060). WorkManagerTestInitHelper#closeWorkDatabase()
foi adicionado para evitar o aviso do Closeguard sobre recursos vazados. (Ia8d49).
Correções de bugs
- Foi adicionada a capacidade de ignorar
overrideNextScheduleTime
usandoTestDriver
e corrigidos problemas com testabilidade. (Ic2905).
Versão 2.9.0-alpha01
7 de junho de 2023
Lançamento de androidx.work:work-*:2.9.0-alpha01
. A versão 2.9.0-alpha01 contém estas confirmações.
Novos recursos
- Observabilidade via
Flow
-s. Em vez deLiveData
, o progresso do worker agora pode ser observado pelo Flow viaWorkManager.getWorkInfosFlow
e métodos semelhantes - Programação precisa de workers periódicos usando
setNextScheduleTimeOverride
. Isso permite o cálculo dinâmico da próxima programação de trabalho periódica, que pode ser usado para implementar recursos avançados, como tempos de atualização adaptáveis, comportamento personalizado de nova tentativa ou execução de um worker do feed de notícias antes que o usuário acorde todas as manhãs sem deslocamentos. OExistingPeriodicWorkPolicy.UPDATE
deve ser usado com essas técnicas para evitar o cancelamento de um worker em execução enquanto o próximo é programado. - Testes de
WorkManager
com produção correspondente de linhas de execução.ExecutorsMode.PRESERVE_EXECUTORS
pode ser usado para preservar os executores definidos emConfiguration
e usar a linha de execução principal real. - As APIs de corrotinas, como
CoroutineWorker
, foram movidas do artefatowork-runtime-ktx
para o artefato principalwork-runtime
.work-runtime-ktx
está vazio agora.
Mudanças na API
- O construtor de
WorkInfo
agora é público, o que pode ser útil nos testes. (Ia00b6, b/209145335). - O
work-runtime-ktx
agora está vazio,CoroutineWorker
e outros utilitários específicos do Kotlin estão disponíveis no artefatowork-runtime
principal. (I71a9a). - O método
setNextScheduleTimeOverride
foi adicionado, o que permite a configuração precisa de programações de trabalho periódicas (I3b4da). getEarliestRunTimeMillis
foi renomeado comogetNextScheduleTimeMillis
(I2bd7a).- As informações do horário da próxima execução programada foram adicionadas a
WorkInfo
. (I797e4). - As informações de periodicidade e atraso inicial são adicionadas a
WorkInfo
. (I52f2f). - Adição de um método para observar workers usando fluxos com os métodos
getWorkInfosByTagFlow
,getWorkInfoByIdFlow
,getWorkInfosForUniqueWorkFlow
,getWorkInfosFlow
(If122a). - Foram adicionadas anotações
@RequiresApi(...)
ausentes a construtores e propriedades do Constraints Agora, elas estão alinhadas com as anotações correspondentes em setters noConstraints.Builder
que existiam nas versões anteriores doWorkManager
. (I6d7d2). - O
WorkManager
agora tem um limite separado para workers de uri de conteúdo para garantir slots emJobScheduler
e evitar que as atualizações de conteúdo sejam perdidas devido à alta carga. O limite pode ser configurado usandoConfiguration.Builder.setContentUriTriggerWorkersLimit
. (Ic128f). - As restrições foram adicionadas a
WorkInfo
. (I162c0).
Versão 2.8
Versão 2.8.1
22 de março de 2023
Lançamento de androidx.work:work-*:2.8.1
. A versão 2.8.1 contém estas confirmações.
Correções de bugs
- Correção de ANR no
RescheduleReceiver
, que antes não processava corretamente duas transmissões simultâneas (b/236906724).
Versão 2.8.0
8 de fevereiro de 2023
Lançamento de androidx.work:work-*:2.8.0
. A versão 2.8.0 contém estas confirmações.
Mudanças importantes desde a versão 2.7.0
Novos recursos
- Foi adicionada a capacidade de atualizar
WorkRequests
de forma não intrusiva, preservando o tempo original da fila, do encadeamento, entre outros. Consulte a postagem detalhada sobre esse recurso, assim como javadocs deWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
para conferir mais detalhes.
Mudanças na API
WorkManager.updateWork
foi adicionado para atualizar o trabalho que preserva o tempo original de enfileiramento e encadeamento (I9a248, b/219446409).- A
ExistingPeriodicWorkPolicy.UPDATE
foi adicionada. Essa política permite atualizar um trabalho periódico pelo nome. Ela é parecida com o valorREPLACE
atual, mas é menos invasiva, porque não cancela um worker em execução e preserva o tempo de enfileiramento. O atraso e período iniciais são calculados usando o tempo original da fila em vez do tempo de atualização. O uso deREPLACE
foi descontinuado para diminuir a confusão entreREPLACE
eUPDATE
, que têm nomes muito parecidos. Se você ainda quiser manter a semântica anterior deREPLACE
, use o novoCANCEL_AND_REENQUEUE
, que é idêntico aREPLACE
(I985ed, b/219446409). - Foi adicionada a capacidade de interceptar exceções de programação que fornecem
Consumer<Throwable>
via setSchedulingExceptionHandler. - Foi adicionada a capacidade de fornecer
Consumer<Throwable>
via setInitializationExceptionHandler para determinar se houve problemas ao tentar inicializar o WorkManager. - Os auxiliares inline para
OneTimeWorkRequest
ePeriodicWorkRequest
foram movidos deandroidx.work:work-runtime-ktx
paraandroidx.work:work-runtime
(I0010f, b/209145335). - Os métodos auxiliares
WorkQuery.fromIds
,WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
eWorkQuery.fromTags
foram adicionados para criar aWorkQuery
diretamente (b/199919736) (If48f2, b/199919736). - O método
getForegroundInfo
foi adicionado aoWorker
(Ic1ead). - O
RxWorker
para RxJava 2 e RxJava 3 agora tem o métodosetForeground
que retorna um elementoCompletable
. Ele pode ser usado no lugar desetForegroundInfoAsync
, que retorna um artefatoListenableFuture
- O
RxWorker
para RxJava 2 e RxJava 3 tem umgetForegroundInfo
que retorna um elementoSingle
. Ele pode ser usado no lugar degetForegroundInfoAsync
, que retorna umListenableFuture
(b/203851459). - Agora, as restrições podem ser construídas diretamente em vez de pelo
Constraints.Builder
, o que é conveniente para usuários do Kotlin (Idc390, b/137568653). - Foi adicionada a capacidade de verificar se o
WorkManager
foi inicializado. Além disso, uma nova APIgetConfiguration()
foi adicionada para que os desenvolvedores de bibliotecas recebam a configuração com que oWorkManager
foi inicializado (I6eff3, b/212300336).
Correções de bugs
- Corrigido um problema com o excesso de atividades do programador que impedia os workers de serem executados imediatamente durante o carregamento (I9686b, b/248111307).
- Adicionamos a
@RequiresPermission
a APIs que exigem a permissãoPOST_NOTIFICATIONS
no SDK 33 e versões mais recentes (Ie542e, b/238790278). - Propagação de cancelamentos no
CoroutineScope
para oListenableFuture
ao usarsuspendCancellableCoroutine
.
Versão 2.8.0-rc01
7 de dezembro de 2022
Lançamento de androidx.work:work-*:2.8.0-rc01
. A versão 2.8.0-rc01 contém essas confirmações.
Novos recursos
- Não há novos recursos nesta versão. Isso se refere principalmente a um aumento de versão.
Versão 2.8.0-beta02
9 de novembro de 2022
Lançamento de androidx.work:work-*:2.8.0-beta02
. A versão 2.8.0-beta02 contém estas confirmações.
Correções de bugs
- Correção do método
equals
emWorkInfo
, que antes não levava em consideração as novas informações de geração (4977cc).
Versão 2.8.0-beta01
5 de outubro de 2022
Lançamento de androidx.work:work-*:2.8.0-beta01
. A versão 2.8.0-beta01 contém estas confirmações.
Correções de bugs
- Corrigido um problema com o excesso de atividades do programador que impedia os workers de serem executados imediatamente durante o carregamento (I9686b, b/248111307).
Versão 2.8.0-alpha04
7 de setembro de 2022
Lançamento de androidx.work:work-*:2.8.0-alpha04
. A versão 2.8.0-alpha04 contém estas confirmações.
Mudanças na API
- Foram adicionados
WorkerInfo.getGeneration()
eWorkerParameters.getGeneration()
, que retornam a geração de um worker. Um worker tem várias gerações quando é atualizado porWorkManager.updateWork
ouWorkManager.enqueueUniquePeriodicWork
usandoExistingPeriodicWorkPolicy.UPDATE
. Se o worker estiver em execução no momento, esse método vai poder retornar uma geração mais recente após uma atualização (I665c5, b/219446409) (I128a9, b/219446409). - Foi adicionado
InitializationExceptionHandler
, um gerenciador de exceções que pode ser usado para determinar se houve problemas ao tentar inicializarWorkManager
(I061de).
Versão 2.8.0-alpha03
10 de agosto de 2022
Lançamento de androidx.work:work-*:2.8.0-alpha03
. A versão 2.8.0-alpha03 contém estas confirmações.
Novos recursos
- Foi adicionada a capacidade de atualizar
WorkRequests
de forma não intrusiva, preservando o tempo original da fila, do encadeamento, entre outros. ConsulteWorkManager.updateWork
eExistingPeriodicWorkPolicy.UPDATE
para saber mais detalhes.
Mudanças na API
WorkManager.updateWork
foi adicionado para atualizar o trabalho que preserva o tempo original de enfileiramento e encadeamento (I9a248, b/219446409).- A
ExistingPeriodicWorkPolicy.UPDATE
foi adicionada. Esta política permite atualizar um trabalho periódico pelo nome. Ela é parecida com o método atualREPLACE
, mas é menos invasiva, porque não cancela um worker em execução e preserva o tempo de enfileiramento. O atraso e o período inicial são calculados usando o tempo original da fila em vez do tempo de atualização. O uso deREPLACE
foi descontinuado para diminuir a confusão entre nomes muito parecidos comREPLACE
eUPDATE
. Se você ainda quiser manter a semântica anterior deREPLACE
, use o novoCANCEL_AND_REENQUEUE
, que é idêntico aREPLACE
(I985ed, b/219446409). - Foi adicionada a capacidade de interceptar exceções de programação definindo um
SchedulingExceptionHandler
(I033eb). - Os auxiliares inline para
OneTimeWorkRequest
ePeriodicWorkRequest
foram movidos deandroidx.work:work-runtime-ktx
paraandroidx.work:work-runtime
(I0010f, b/209145335).
Correções de bugs
- A
@RequiresPermission
foi adicionada às APIs que exigem a concessão da permissão POST_NOTIFICATIONS no SDK 33 e versões mais recentes (Ie542e, b/238790278).
Versão 2.8.0-alpha02
6 de abril de 2022
Lançamento de androidx.work:work-*:2.8.0-alpha02
. A versão 2.8.0-alpha02 contém estas confirmações.
Mudanças na API
- Agora, as restrições podem ser construídas diretamente em vez de pelo builder, o que é conveniente para usuários do Kotlin (Idc390, b/137568653).
- Foi adicionada a capacidade de verificar se o
WorkManager
foi inicializado. Além disso, uma nova APIgetConfiguration()
foi adicionada para que os desenvolvedores de bibliotecas recebam a configuração com que oWorkManager
foi inicializado (I6eff3, b/212300336).
Versão 2.8.0-alpha01
12 de janeiro de 2022
Lançamento de androidx.work:work-*:2.8.0-alpha01
. A versão 2.8.0-alpha01 contém estas confirmações.
Mudanças na API
- Os métodos auxiliares
WorkQuery.fromStates
,WorkQuery.fromUniqueWorkNames
eWorkQuery.fromTags
foram adicionados para criar a WorkQuery diretamente (If48f2, b/199919736). - Adição de métodos experimentais BuildCompat para SDKs futuros (Iafd82, b/207528937).
- Adição de
getForegroundInfo
àWorker
(Ic1ead). - Adição dos métodos auxiliares
WorkQuery.fromIds
para criar a WorkQuery diretamente com os IDs (Ie5bdf, b/199919736). - O RxWorker agora tem o método
setForeground
retornando um elementoCompletable
. Ele pode ser usado no lugar desetForegroundInfoAsync
, que retorna um artefatoListenableFuture
(I85156). - O RxWorker para RxJava 2 agora tem o método
getForegroundInfo
retornando um elementoSingle
. Ele pode ser usado no lugar degetForegroundInfoAsync
, que retorna um artefatoListenableFuture
(I21c91, b/203851459). - O RxWorker para RxJava 3 agora tem um método
getForegroundInfo
retornando um elementoSingle
. Ele pode ser usado no lugar degetForegroundInfoAsync
, que retorna um artefatoListenableFuture
(I1ca8a). - O RxWorker agora tem o método
setForeground
retornando um elementoCompletable
. Ele pode ser usado no lugar desetForegroundInfoAsync
, que retorna um artefatoListenableFuture
(I992a3, b/203851459).
Correções de bugs
- Propagação de cancelamentos no
CoroutineScope
para oListenableFuture
ao usarsuspendCancellableCoroutine
(I77e63).
Versão 2.7
Versão 2.7.1
17 de novembro de 2021
Lançamento de androidx.work:work-*:2.7.1
. A versão 2.7.1 contém estas confirmações.
Correções de bugs
- Os cancelamentos no
CoroutineScope
são propagados para oListenableFuture
ao usar o métodosuspendCancellableCoroutine
(I77e63). - Uma exceção é gerada imediatamente quando solicitações de trabalho atrasadas são marcadas como aceleradas (bef1762).
Versão 2.7.0
13 de outubro de 2021
androidx.work:work-*:2.7.0
é lançado. A versão 2.7.0 contém estas confirmações.
Mudanças importantes desde a versão 2.6.0
O WorkManager introduz uma nova API
WorkRequest.Builder.setExpedited(...)
para ajudar com as restrições de serviço em primeiro plano no Android 12.Ao usar
setExpedited(...)
, o WorkManager delega para jobs priorizados no JobScheduler começando pelo Android 12, mas mantém a compatibilidade com versões anteriores do Android delegando a um serviço em primeiro plano.
Versão 2.7.0-rc01
29 de setembro de 2021
androidx.work:work-*:2.7.0-rc01
é lançado. A versão 2.7.0-rc01 contém estas confirmações.
Esta versão é idêntica à androidx.work:work-*:2.7.0-beta01
.
Versão 2.7.0-beta01
1º de setembro de 2021
Lançamento de androidx.work:work-*:2.7.0-beta01
. A versão 2.7.0-beta01 contém estas confirmações.
Novos recursos
- Redução da contenção de SQLite em vários processos ao inicializar o WorkManager.
Mudanças na API
- Remoção de APIs
@ExperimentalExpeditedWork
, já que as APIs de plataforma subjacentes para o Android 12 (S) são estáveis (aosp/1792806).
Correções de bugs
- Fornecimento de uma mensagem de erro melhor para workers acelerados que não implementam
getForegroundInfoAsync()
(aosp/1809376).
Versão 2.7.0-alpha05
21 de julho de 2021
Lançamento de androidx.work:work-*:2.7.0-alpha05
. A versão 2.7.0-alpha05 contém estas confirmações.
Essa versão também contém correções de bugs do WorkManager 2.6.0-beta02
.
Versão 2.7.0-alpha04
2 de junho de 2021
Lançamento de androidx.work:work-*:2.7.0-alpha04
.
Essa versão também contém as mudanças da 2.6.0-beta01.
Mudanças na API
- A
ListenableWorker.setForegroundAsync()
não está mais descontinuada. - Recomendamos usar a API
WorkRequest.Builder.setExpedited(...)
quando possível. Para oferecer melhor suporte em situações em que o app não está sujeito a restrições de serviço em primeiro plano, os desenvolvedores podem usar a APIListenableWorker.setForegroundAsync()
. - Se a
ListenableWorker.setForegroundAsync()
for chamada, quando o app estiver sujeito a restrições de serviço em primeiro plano, uma ForegroundServiceStartNotAllowedException será gerada.
Correções de bugs
- Quando os jobs acelerados forem reprogramados, eles não serão mais acelerados. Eles se tornarão jobs normais.
Versão 2.7.0-alpha03
21 de abril de 2021
Lançamento de androidx.work:work-*:2.7.0-alpha03
. A versão 2.7.0-alpha03 contém essas confirmações.
Novos recursos
Do WorkManager (link em inglês)
2.6.0-alpha02
: adição de suporte para workers que podem ser executados em qualquer processo (Iaf200).Do WorkManager
2.6.0-alpha02
: adição de umRemoteCoroutineWorker
que é uma implementação deRemoteListenableWorker
que pode se vincular a um processo remoto (I30578).
Mudanças na API
- Do WorkManager
2.6.0-alpha02
: adição de suporte para restrição de redeTEMPORARILY_UNMETERED
(I08d5e). - Do WorkManager
2.6.0-alpha02
: suporte de worker para vários processos comsetProgressAsync()
(Ib6d08). - Do WorkManager
2.6.0-alpha02
: tornar oWorkManagerInitializer
público para que outrosandroidx.startup.Initializer
possam ser usados como dependências (I5ab11).
Versão 2.7.0-alpha02
10 de Março de 2021
Lançamento de androidx.work:work-*:2.7.0-alpha02
. A versão 2.7.0-alpha02 contém estas confirmações.
Correções de bugs
- A mutabilidade da
PendingIntent
agora é explícita para corrigir uma falha quando usada no Android 12 (b/180884673).
Versão 2.7.0-alpha01
18 de fevereiro de 2021
Lançamento do androidx.work:work-*:2.7.0-alpha01
. A versão 2.7.0-alpha01 contém estas confirmações
Novos recursos
O WorkManager introduz uma nova API
WorkRequest.Builder.setExpedited(...)
para considerar as restrições do serviço em primeiro plano no Android 12.Os aplicativos não podem mais iniciar um serviço em primeiro plano quando estão em segundo plano. Portanto, para oferecer melhor suporte em um trabalho de longa duração vinculado anteriormente ao ciclo de vida de um serviço em primeiro plano, os aplicativos podem marcar
WorkRequest
s como acelerados.Esta API é uma substituição para as APIs
setForegroundAsync(...)
/setForeground(...)
que foram descontinuadas.Ao usar
setExpedited(...)
, o WorkManager delega para jobs priorizados noJobScheduler
a partir do Android 12, mas mantém a compatibilidade com versões anteriores do Android delegando aos serviços em primeiro plano.
Mudanças na API
- Adição de suporte para
WorkRequest
s aceleradas.
Versão 2.6.0
Versão 2.6.0
1º de setembro de 2021
Lançamento de androidx.work:work-*:2.6.0
. A versão 2.6.0 contém estas confirmações.
Mudanças importantes desde a versão 2.5.0
O WorkManager agora usa
androidx.startup
para inicializar o WorkManager. Se você usavatools:node="remove"
, oContentProvider
que era usado para inicializar o ciclo de vida do processo anteriormente, é necessário fazer o seguinte.<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" />
Adição de suporte para workers que podem ser executados em qualquer processo. (Iaf200).
Adição de um
RemoteCoroutineWorker
, uma implementação de RemoteListenableWorker que pode ser vinculada a um processo remoto (I30578).
Versão 2.6.0-rc01
4 de agosto de 2021
Lançamento de androidx.work:work-*:2.6.0-rc01
. A versão 2.6.0-rc01 contém estas confirmações.
Esta versão é idêntica à androidx.work:work-*:2.6.0-beta02
.
Versão 2.6.0-beta02
21 de julho de 2021
Lançamento de androidx.work:work-*:2.6.0-beta02
. A versão 2.6.0-beta02 contém estas confirmações.
Correções de bugs
- O
RemoteWorkManager
agora se desvincula corretamente doRemoteWorkManagerService
, possibilitando que oRemoteWorkManagerService
seja limpo sem qualquer erro (aosp/1730694). - O
RemoteListenableWorker
agora se desvincula corretamente doRemoteWorkerService
, possibilitando que oRemoteWorkerService
seja limpo sem qualquer errro (aosp/1743817). - O
ForceStopRunnable
agora só é executado no processo principal do app. Essa é uma otimização e evita a contenção de recursos para apps que usam vários processos (aosp/1749180, aosp/1761729).
Versão 2.6.0-beta01
2 de junho de 2021
Lançamento de androidx.work:work-*:2.6.0-beta01
. A versão 2.6.0-beta01 contém estas confirmações.
Essa versão contém algumas pequenas melhorias na documentação. Ela é praticamente idêntica à 2.6.0-alpha02.
Versão 2.6.0-alpha02
21 de abril de 2021
Lançamento de androidx.work:work-*:2.6.0-alpha02
. A versão 2.6.0-alpha02 contém essas confirmações.
Novos recursos
Adiciona suporte para workers que podem ser executados em qualquer processo (Iaf200).
Adição de um
RemoteCoroutineWorker
, que é uma implementação deRemoteListenableWorker
que pode ser vinculada a um processo remoto (I30578).
Mudanças na API
- Adição de suporte para restrição de rede
TEMPORARILY_UNMETERED
(I08d5e). - Suporte de worker de vários processos para
setProgressAsync()
(Ib6d08). - O
WorkManagerInitializer
agora é público para que possa ser usado como dependência por outrosandroidx.startup.Initializer
s (I5ab11).
Versão 2.6.0-alpha01
24 de março de 2021
Lançamento de androidx.work:work-*:2.6.0-alpha01
. A versão 2.6.0-alpha01 contém estas confirmações.
Novos recursos
WorkManager
agora usaandroidx.startup
para inicializar o WorkManager. Anteriormente, isso era feito peloandroidx.work.impl.WorkManagerInitializer
(aosp/1608813).Se você usava
tools:node="remove"
, oContentProvider
que era usado para inicializar o ciclo de vida do processo anteriormente, será necessário fazer o seguinte.<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>
(ou)
<!-- If you want to disable android.startup completely. --> <provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove"> </provider>
Mudanças na API
- Adição de uma API
Result.getOutputData()
que retorna ooutputData
do ListenableWorker (Ie51e3).
Correções de bugs
- Adicione uma solução alternativa para um bug de OEM que causa uma
SecurityException
ao usar APIsAlarmManager
(aosp/1587518).
Versão 2.5.0
Versão 2.5.0
27 de janeiro de 2021
Lançamento de androidx.work:work-*:2.5.0
. A versão 2.5.0 contém estas confirmações.
Principais mudanças desde a versão 2.4.0
- Um novo artefato
:work:work-multiprocess
para apps que usam vários processos. Isso gera ganhos de desempenho ao unificar a programação de solicitações de trabalho em um único processo.- Definição de uma dependência em
implementation "androidx.work:work-multiprocess:2.5.0"
para usarwork-multiprocess
- Designação de um processo principal usando Configuration.Builder.setDefaultProcessName(String).
- Ao usar
work-multiprocess
, também é recomendável usar o RemoteWorkManager para gerenciar suasWorkRequest
s. O RemoteWorkManager sempre acessa o processo designado. O programador em processo também é executado no processo designado.
- Definição de uma dependência em
- Às vezes,
ActivityManager
não consegue instanciarJobService
para iniciar um job. Isso faz com que o job implícito seja silenciosamente descartado devido a um bug da plataforma. OWorkManager
agora garante que haja jobs de apoio para cadaWorkRequest
quando umApplication
estiver sendo inicializado ao reconciliar os jobs. Isso melhora muito a confiabilidade da execução de jobs (b/172475041, aosp/1489577). - O
WorkManager
limita o crescimento do banco de dados reduzindo a duração do buffer para o qual asWorkRequest
s são rastreadas após a conclusão de umaWorkRequest
. Antes, a duração era de7
dias. Ela foi reduzida para1
dia + a duração de keepResultsForAtLeast (aosp/1419708). - O
TestListenableWorkerBuilder
agora oferece suporte à classe reificada que estendeListenableWorker
para facilitar os testes (aosp/1443299, b/169787349). - O WorkManager Inspector agora está disponível ao usar o Android Studio Arctic Fox.
Versão 2.5.0-rc01
13 de janeiro de 2021
Lançamento de androidx.work:work-*:2.5.0-rc01
. A versão 2.5.0-rc01 contém estas confirmações.
Correções de bugs
- Corrigido um bug em que o
getWorkInfosLiveData
não era invalidado corretamente após a atualização de entidades ao usar a API baseada emWorkQuery
(aosp/1540566, b/173769028). - Corrigido um bug em que as transações do banco de dados não eram marcadas como bem-sucedidas em alguns casos raros. Isso causa problemas em alguns dispositivos Motorola (aosp/1535368, b/175944460).
- Correção de um bug para ignorar
NoSuchElementException
s ao tentar se desvincular de um processo inativo (aosp/1530589). - Melhoria em
ConstraintTrackingWorker
para interromper umListenableWorker
apenas se ele ainda não tiver sido interrompido (aosp/1496844, b/172946965). - Atualização das bibliotecas androidx.work para Java 8 (Ibd2f2).
Versão 2.5.0-beta02
2 de dezembro de 2020
Lançamento de androidx.work:work-*:2.5.0-beta02
. A versão 2.5.0-beta02 contém estas confirmações.
Correções de bugs
- Corrigido um bug no
androidx.work:work-multiprocess
em que o WorkManager bloqueou acidentalmente a linha de execução de chamada ao tentar se vincular ao processo designado (aosp/1475538). - Correção de um bug em que as
PeriodicWorkRequest
s não estavam sendo reconciliadas corretamente (b/172475041, aosp/1489577). - Adição de uma solução alternativa para um bug de plataforma ao interromper o serviço em primeiro plano durante o uso das APIs
setForeground*
(b/170924044, aosp/1489901).
Versão 2.5.0-beta01
28 de outubro de 2020
androidx.work:work-*:2.5.0-beta01
é lançado. A versão 2.5.0-beta01 contém estas confirmações.
Novos recursos
- O
WorkManager
limita automaticamente o número deWorkRequest
s que podem ser selecionadas pelo programador de processos. As solicitações ainda são executadas na ordem FIFO (aosp/1455228). - O
WorkManager
tenta a recuperação quando o armazenamento de dados do aplicativo está em um estado inadequado (aosp/1463103).
Correções de bugs
- Quando
ListenableWorker
s forem interrompidos, marque-os imediatamente comoENQUEUED
para que possam ser reprogramados (aosp/1455618, b/170273988).
Versão 2.5.0-alpha03
14 de outubro de 2020
androidx.work:work-*:2.5.0-alpha03
é lançado. A versão 2.5.0-alpha03 contém estas confirmações.
Mudanças na API
TestListenableWorkerBuilder
eTestWorkerBuilder
não usam tipos brutos (I883ad, b/169787349).
Correções de bugs
- Uso de
ApplicationInfo
para determinar o nome do processo padrão do app (b/168716641, aosp/1429950). - Correção das regras de visibilidade para
RemoteWorkManager
eRemoteWorkContinuation
. Essas APIs não são mais marcadas como@Restricted
(aosp/1432091). - Correção das regras do ProGuard para
:work:work-multiprocess
(aosp/1432091). - Melhoria dos ciclos de vida de notificações para trabalhos de longa duração vinculados a um serviço em primeiro plano (b/168502234, aosp/1431331).
Versão 2.5.0-alpha02
16 de setembro de 2020
androidx.work:work-*:2.5.0-alpha02
é lançado. A versão 2.5.0-alpha02 contém estas confirmações.
Novos recursos
- Adição de uma API ao WorkQuery para usar
id
s para consultarWorkInfo
s (aosp/1412372, b/157335295). - O WorkManager oferece suporte aprimorado a apps que usam vários processos com um novo artefato (
androidx.work:work-multiprocess:*
). Esse novo artefato ajuda a resolver alguns problemas que os apps grandes encontram, incluindo:- Normalmente, o WorkManager precisa ser inicializado em todos os processos do app. Isso não é ideal, porque causa um aumento de contenção no SQLite, o que gera outros problemas. O WorkManager agora tem novas APIs que podem ser usadas para designar um processo principal do app usando o
Configuration#setDefaultProcessName(processName)
. OprocessName
é um nome de processo totalmente qualificado que tem a seguinte aparência:packageName:processName
(por exemplo,com.example:remote
). - Um conjunto de novas APIs:
RemoteWorkManager
eRemoteWorkContinuation
para solicitações de trabalhoenqueue
,cancel
equery
. Essas APIs não incluem variantesLiveData
para evitar a contenção de SQLite em processos múltiplos. Todas as chamadas paraenqueue
,cancel
equery
são encaminhadas para um processoprimary
do app usando AIDL e retornam umListenableFuture
fluente (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713).
- Normalmente, o WorkManager precisa ser inicializado em todos os processos do app. Isso não é ideal, porque causa um aumento de contenção no SQLite, o que gera outros problemas. O WorkManager agora tem novas APIs que podem ser usadas para designar um processo principal do app usando o
Mudanças na API
- O WorkManager agora remove de forma mais agressiva as
WorkRequest
s concluídas que não têm dependências incompletas. A duração do buffer foi modificada de7
dias para1
dia (aosp/1419708).
Correções de bugs
- O WorkManager agora reconcilia jobs proativamente para que jobs
WorkRequest
s eJobScheduler
estejam sincronizados quando oWorkManager
for inicializado (aosp/1412794, b/166292069).
Versão 2.5.0-alpha01
19 de agosto de 2020
androidx.work:work-*:2.5.0-alpha01
é lançado. A versão 2.5.0-alpha01 contém estas confirmações.
Novos recursos
- Mudanças nas APIs internas permitem oferecer ferramentas melhores com o
WorkManager
daqui em diante. Fique de olho nas próximas atualizações.
Correções de bugs
- Processamento de
SecurityException
s ao rastrear o estado da rede em alguns dispositivos (aosp/1396969).
Contribuição externa
- Correção da documentação de
ArrayCreatingInputMerger
por Zac Sweers (github/43).
Versão 2.4.0
Versão 2.4.0
22 de julho de 2020
androidx.work:work-*:2.4.0
é lançado. A versão 2.4.0 contém estas confirmações.
Principais mudanças desde a versão 2.3.0
- O escalonador de processos de
WorkManager
s agora está mais capacitado. Anteriormente, oScheduler
de processos considerava apenas a execução de trabalhos que não atrasavam e cujas restrições eram atendidas. O escalonador de processos agora monitoraWorkRequest
s que podem ser executados no futuro, incluindo PeriodicWorkRequests. OScheduler
de processos também não observa os limites de programação, mas ainda está restrito ao tamanho doExecutor
usado pelo WorkManager. Isso significa que o aplicativo agora pode executar muito mais WorkRequests quando o app está em primeiro plano. Para gerenciar a execução de trabalhos atrasados em primeiro plano, oWorkManager
também introduz um novoRunnableScheduler
configurável (aosp/1185778). - O WorkManager agora oferece suporte ao RxJava 3. Para usar o RxJava 3, inclua a seguinte dependência:
implementation "androidx.work:work-rxjava3:2.4.0"
(aosp/1277904). - Adição da capacidade de consultar
WorkInfo
s usando umaWorkQuery
. Isso é útil quando os desenvolvedores querem procurarWorkInfo
s com uma combinação de vários atributos. Para saber mais, consulteWorkQuery.Builder.fromStates(...)
,WorkQuery.Builder. fromTags(...)
ouWorkQuery.Builder.fromUniqueWorkNames(...)
(aosp/1253230, b/143847546). Adição de capacidade de solicitar informações de diagnóstico do
WorkManager
usando:adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
Isso fornece muitas informações úteis, incluindo:
- WorkRequests que foram concluídos nas últimas 24 horas.
- WorkRequests EM EXECUÇÃO no momento.
- WorkRequests agendados (aosp/1235501).
Adição de
ExistingWorkPolicy.APPEND_OR_REPLACE
, que é semelhante aAPPEND
, mas substitui uma cadeia que cancelou ou não cumpriu os pré-requisitos (b/134613984, aosp/1199640).Capacidade de adicionar um
RunnableScheduler
personalizado para monitorar WorkRequests que precisam ser executados no futuro. Isso é usado pelo programador de processos (aosp/1203944).Foi adicionado suporte à adição dinâmica de fábricas para delegação ao usar um
DelegatingWorkerFactory
(b/156289105, aosp/1309745).Alinhamento mais preciso das restrições de
BATTERY_NOT_LOW
em relação à plataforma (aosp/1312583).O programador em processo agora usa APIs melhores para determinar o nome do processo. Isso é útil para oferecer melhor compatibilidade a apps que usam vários processos (aosp/1324732).
Novas regras de lint que obrigam:
- Uso do
foregroundServiceType
correto ao usar APIssetForegroundAsync()
(b/147873061, aosp/1215915). - A especificação de IDs do JobScheduler que o WorkManager precisa usar com as APIs do JobService diretamente (aosp/1223567).
- Foi adicionada uma nova regra de lint que garante que as implementações de
ListenableWorker
agora sejampublic
ao usar aWorkerFactory
padrão (aosp/1291262).
- Uso do
As chamadas para
setForegroundAsync()
que não são concluídas antes da conclusão de umListenableWorker
agora são sinalizadas usando umIllegalStateException
noListenableFuture
retornado (aosp/1262743).Corrigido um bug em que o
ForegroundService
não é interrompido depois que umWorker
em primeiro plano é interrompido (b/155579898, aosp/1302153).Correção de um bug em que
WorkManager
tenta executar várias instâncias de umWorker
vinculado a um serviço em primeiro plano (b/156310133, aosp/1309853).
Versão 2.4.0-rc01
24 de junho de 2020
androidx.work:work-*:2.4.0-rc01
é lançado. A versão 2.4.0-rc01 contém estas confirmações.
Correções de bugs
- O programador em processo agora usa APIs melhores para determinar o nome do processo. Isso é útil para oferecer melhor compatibilidade a apps que usam vários processos (aosp/1324732).
Versão 2.4.0-beta01
20 de maio de 2020
Lançamento 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
e androidx.work:work-testing:2.4.0-beta01
. A versão 2.4.0-beta01 contém estas confirmações.
Correções de bugs
- Corrigido um bug em que o
ForegroundService
não é interrompido depois que umWorker
em primeiro plano é interrompido (b/155579898, aosp/1302153). - Corrigido um bug em que
WorkManager
tenta executar várias instâncias de umWorker
vinculado a um serviço em primeiro plano (b/156310133, aosp/1309853). - Foi adicionado suporte à adição dinâmica de fábricas para delegação ao usar um
DelegatingWorkerFactory
(b/156289105, aosp/1309745). - Alinhamento mais preciso das restrições de
BATTERY_NOT_LOW
em relação à plataforma (aosp/1312583).
Versão 2.4.0-alpha03
29 de abril de 2020
androidx.work:work-*:2.4.0-alpha03
é lançado. A versão 2.4.0-alpha03 contém estas confirmações.
Novos recursos
- O WorkManager agora oferece suporte ao RxJava 3. Para usar o RxJava 3, inclua a seguinte dependência:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
(aosp/1277904). - Foi adicionada uma nova regra de lint que garante que as implementações de
ListenableWorker
agora sejampublic
ao usar aWorkerFactory
padrão (aosp/1291262).
Mudanças na API
- As chamadas para
setProgressAsync()
depois da execução de umListenableWorker
vão sinalizar umaException
usando umListenableFuture
(aosp/1285494). WorkQuery.Builder
agora está marcado comofinal
(aosp/1275037).- Os métodos de fábrica
withStates
,withTags
ewithUniqueWorkNames
doWorkQuery.Builder
foram renomeados comofromStates
,fromTags
efromUniqueWorkNames
, respectivamente (aosp/1280287, link em inglês).
Correções de bugs
SecurityException
s são ignoradas ao rastrear o estado da rede de um dispositivo (b/153246136, aosp/1280813, links em inglês).
Versão 2.4.0-alpha02
1º de abril de 2020
androidx.work:work-*:2.4.0-alpha02
é lançado. A versão 2.4.0-alpha02 contém estas confirmações.
Novos recursos
- Adição de uma nova regra de lint que avisa quando
WorkRequest
s requeremConstraints.setRequiresCharging(...)
eConstraints.setRequiresDeviceIdle(...)
. Alguns dispositivos nunca estão inativos enquanto estiverem sendo carregados. Se isso ocorresse, essas solicitações seriam executadas com menos frequência do que o esperado (aosp/1253840, link em inglês).
Mudanças na API
Adição da capacidade de consultar
WorkInfo
s usando umaWorkQuery
. Isso é útil quando os desenvolvedores querem procurarWorkInfo
s com uma combinação de vários atributos. Para saber mais, consulteWorkQuery.Builder withStates(...)
,WorkQuery.Builder withTags(...)
ouWorkQuery.Builder withUniqueWorkNames(...)
(aosp/1253230, b/143847546).As chamadas para
setForegroundAsync()
que não são concluídas antes da conclusão de umListenableWorker
agora são sinalizadas usando umIllegalStateException
noListenableFuture
retornado (aosp/1262743).
Correções de bugs
- Correção da regra de lint que verifica durações de intervalo inválidas para
PeriodicWorkRequest
s (aosp/1254846, b/152606442, links em inglês).
Versão 2.4.0-alpha01
4 de março de 2020
androidx.work:work-*:2.4.0-alpha01
é lançado. A versão 2.4.0-alpha01 contém estas confirmações.
Novos recursos
O escalonador de processos de
WorkManager
s agora está mais capacitado. Anteriormente, o escalonador de processos considerava apenas a execução de trabalhos que não atrasavam e cujas restrições eram atendidas. O escalonador de processos agora monitoraWorkRequest
s que podem ser executados no futuro, incluindoPeriodicWorkRequest
s. O escalonador de processos também não observa os limites de programação, mas ainda está restrito ao tamanho doExecutor
usado pelo WorkManager. Isso significa que o aplicativo agora pode executar muitos maisWorkRequest
s quando o app estiver em primeiro plano (aosp/1185778).Adição da capacidade de solicitar informações de diagnóstico do WorkManager usando
adb shell am broadcast -a "androidx.work.diagnostics.REQUEST_DIAGNOSTICS" -p "<your_app_package_name>"
. Isso fornece muitas informações úteis, incluindo:- WorkRequests que foram concluídos nas últimas 24 horas.
- WorkRequests EM EXECUÇÃO no momento.
- WorkRequests agendados (aosp/1235501).
Novas regras de lint que obrigam:
- Uso do
foregroundServiceType
correto ao usar APIssetForegroundAsync()
(b/147873061, aosp/1215915). - Especificação de IDs
JobScheduler
usados porWorkManager
ao usar APIsJobService
diretamente (aosp/1223567, link em inglês).
- Uso do
Mudanças na API
Adição de
ExistingWorkPolicy.APPEND_OR_REPLACE
, que é semelhante aAPPEND
, mas substitui uma cadeia que cancelou ou não cumpriu os pré-requisitos (b/134613984, aosp/1199640)Capacidade de adicionar um
RunnableScheduler
personalizado para monitorarWorkRequest
s que precisam ser executados no futuro. Isso é usado pelo programador de processos (aosp/1203944, link em inglês).
Correções de bugs
setProgress()
foi descontinuado noRxWorker
porque retornava umSingle<Void>
, que é um tipo impossível. Adição de uma nova API,setCompletableProgress()
, que retorna umCompletable
; e de novas regras de lint, que ajudam a migrar para as novas APIs (b/150080946, aosp/1242665).
Versão 2.3.4
Versão 2.3.4
18 de março de 2020
androidx.work:work-*:2.3.4
é lançado. A versão 2.3.4 contém estas confirmações.
Correções de bugs
- Corrigido um bug que causava a execução de várias instâncias de
Worker
s de execução longa depois de exceder a janela de execução de 10 minutos (aosp/1247484, b/150553353). - Correção do Lint
IssueRegistry
do WorkManager. Agradecemos a @ZacSweers, do Slack, pela contribuição (aosp/1217923, link em inglês).
Versão 2.3.3
Versão 2.3.3
4 de março de 2020
androidx.work:work-*:2.3.3
é lançado. A versão 2.3.3 contém estas confirmações.
Correções de bugs
- Correção de um bug em que, quando um
Worker
era interrompido, ele não era reprogramado corretamente (b/150325687, aosp/1246571).
Versão 2.3.2
Versão 2.3.2
19 de fevereiro de 2020
Lançamento de androidx.work:work-*:2.3.2
. A versão 2.3.2 contém essas confirmações.
Correções de bugs
- Correção de um problema em que o WorkManager excede o limite de 100 jobs no JobScheduler em casos raros (aosp/1226859, b/149092520).
- Correção de uma disputa em ConstraintControllers (aosp/1220100).
- Melhoria no ciclo de vida em serviço de primeiro plano de gerenciamento para os Workers de longa duração (aosp/1226295).
- Melhoria no gerenciamento do cancelamento de notificações para Workers de longa duração após o cancelamento do Worker (aosp/1228346, link em inglês).
Versão 2.3.1
Versão 2.3.1
5 de fevereiro de 2020
androidx.work:work-*:2.3.1
é lançado. A versão 2.3.1 contém estas confirmações.
Correções de bugs
- Melhoria no gerenciamento do ciclo de vida de
Notification
s paraWorker
s de longa duração executados quando umService
está ativo no primeiro plano (aosp/1218539, b/147249312). WorkManager
agora depende deandroidx.sqlite:sqlite-framework:2.1.0
estável (aosp/1217729).- Inclusão de regras de lint para garantir que um
foregroundServiceType
seja especificado noAndroidManifest.xml
ao usarforegroundServiceType
s emForegroundInfo
(aosp/1214207, b/147873061).
Versão 2.3.0
Versão 2.3.0
22 de janeiro de 2020
androidx.work:work-*:2.3.0
é lançado sem mudanças desde 2.3.0-rc01
. A versão 2.3.0 contém estas confirmações.
Mudanças importantes desde a versão 2.2.0
- Foi adicionado suporte para execuções longas ou trabalhos importantes usando o método
ListenableWorker#setForegroundAsync()
. - Suporte ao Worker Progress com
ListenableWorker#setProgressAsync()
. - O WorkManager agora traz mais regras de lint como parte da biblioteca, o que ajuda a detectar bugs mais cedo.
Versão 2.3.0-rc01
8 de janeiro de 2020
androidx.work:work-*:2.3.0-rc01
é lançado. A versão 2.3.0-rc01 contém estas confirmações.
Essa versão é idêntica a 2.3.0-beta02
Correções de bugs
- O artefato
work-testing
agora define uma dependênciaapi
emwork-runtime-ktx
(aosp/1194410, link em inglês).
Versão 2.3.0-beta02
18 de dezembro de 2019
androidx.work:work-*:2.3.0-beta02
é lançado. A versão 2.3.0-beta02 contém estas confirmações.
Novos recursos
- Adição de uma mensagem de erro melhor para exceções SQLite não recuperáveis (aosp/1185777).
- Foi adicionada uma regra de lint que garante que o provedor de conteúdo
androidx.work.impl.WorkManagerInitializer
seja removido doAndroidManifest.xml
ao usar a inicialização sob demanda (aosp/1167007). - Adição de um alerta de lint quando
enqueue()
é usado paraPeriodicWorkRequest
, em vez deenqueueUniquePeriodicWork()
(aosp/1166032, link em inglês).
Mudanças na API
ForegroundInfo
agora exige que você especifique onotificationId
que será empregado ao usarListenableWorker.setForegroundAsync()
. Essa é uma alteração interruptiva. Ela permite que você execute váriosWorker
s de execução longa em paralelo.WorkManager
também gerencia melhor a duração dasNotification
s fornecidas (b/145473554, aosp/1181208, asop/1181216, asop/1183577).
Correções de bugs
- Correção de um bug na implementação do AlarmManager em que os alarmes não eram limpos de forma correta (aosp/1156444).
- Correção de um bug em que uma lista vazia de
WorkRequest
s fazia com que uma cadeia deWorkContinuation
incorreta fosse criada (b/142835274, aosp/1157051).
Mudanças na dependência
- O WorkManager agora usa a Room 2.2.2.
Versão 2.3.0-beta01
20 de novembro de 2019
androidx.work:work-*:2.3.0-beta01
é lançado. A versão 2.3.0-beta01 contém estas confirmações.
Novos recursos
- Foi adicionada uma nova regra de lint que evita erros de desenvolvedor devido à implementação incorreta de
androidx.work.Configuration.Provider
ao usar a inicialização sob demanda (aosp/1164559).
Versão 2.3.0-alpha03
23 de outubro de 2019
androidx.work:work-*:2.3.0-alpha03
é lançado. A versão 2.3.0-alpha03 contém essas confirmações.
Novos recursos
- Foi adicionada a API
WorkManager.createCancelPendingIntent()
, que facilita o cancelamento deWorkRequest
s sem precisar registrar outro componente noAndroidManifest.xml
. Essa API facilita o cancelamento deWorkRequest
s a partir deNotification
s. Esperamos que isso seja combinado com as novas APIs de primeiro plano na versão 2.3.0. - O WorkManager agora depende de um
androidx.room:*:2.2.0
estável.
Mudanças na API
ForegroundInfo.getNotificationType()
foi renomeado comoForegroundInfo.getForegroundServiceType()
para ser mais consistente com as APIs de plataforma subjacentes (b/142729893, aosp/1143316).
Correções de bugs
- Correção de um bug causado por uma chamada desnecessária para
setTransactionSuccessful()
fora da transação. Isso acontece em migrações raras. (b/142580433, aosp/1141737, links em inglês)
Versão 2.3.0-alpha02
9 de outubro de 2019
androidx.work:work-*:2.3.0-alpha02
é lançado. A versão 2.3.0-alpha02 contém estas confirmações.
Novos recursos
- O WorkManager agora oferece suporte a execuções longas ou trabalhos importantes que precisam ser mantidos ativos pelo SO. Para ver mais informações, consulte
ListenableWorker#setForegroundAsync()
(ouCoroutineWorker#setForeground()
para Kotlin). (aosp/1133636, link em inglês)
Mudanças na API
- A API
containsKey
emData
foi renomeada comohasKeyWithValueOfType
. O método de extensão correspondente na bibliotecaktx
também foi renomeado (b/141916545).
Correções de bugs
- As programações do WorkManager funcionam bem quando o número de
WorkRequest
s em fila se aproximam dos limites de programação (aosp/1105766). - O WorkManager só chama
ListenableWorker#onStopped()
se o trabalho ainda não tiver sido concluído (b/140055777). - Agora, o WorkManager remove informações de andamento quando um worker é interrompido ou atinge seu estado terminal (aosp/1114572).
- Agora,
Data
tem uma representaçãotoString()
muito mais útil (b/140945323). - Agora,
Data
tem um métodoequals()
melhor. Ele também é compatível comdeepEquals
para tiposArray
(b/140922528). - O WorkManager agora armazena o banco de dados interno e os arquivos de preferência em um diretório sem backup (b/114808216, link em inglês)
Versão 2.3.0-alpha01
22 de agosto de 2019
androidx.work:work-*:2.3.September 5, 20190-alpha01
é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link.
Novos recursos
ListenableWorker
s agora podem definir o progresso usando a APIsetProgressAsync()
. Também foi adicionada a APIsuspend
setProgress
correspondente emCoroutineWorker
e umasetProgress
emRxWorker
, que retorna umSingle<Void>
. Com essas novas APIs, os workers podem transmitir informações de andamento usando um objetoWorkInfo
, que tem uma APIgetProgress
correspondente (b/79481554).Data
tem uma APIcontainsKey()
que pode ser usada para validar que os dados de entrada paraWorker
têm chaves com o tipo esperado (b/117136838, link em inglês)- Agora,
Data
pode ser serializado usandoData.toByteArray()
eData.fromByteArray()
. Não há qualquer garantia de controle de versões comData
. Por esse motivo, não persista nele nem o use para IPC entre apps. Ele só é seguro para uso entre vários processos do mesmo app. - Foi adicionada a capacidade de especificar um
InputMergerFactory
usando umConfiguration.setInputMergerFactory
(b/133273159, link em inglês).
Mudanças na API
- O WorkManager gera uma instância de
IllegalStateException
se umWorkerFactory
retorna uma instância deListenableWorker
que foi invocada anteriormente (b/139554406). - Atualizações da documentação sobre o cancelamento
ListenableFuture
e o callbackonStopped()
emListenableWorker
(b/138413671, link em inglês)
Correções de bugs
- O escalonador de processos agora ignora
WorkRequest
s com a restriçãoidle
. Essas solicitações agora só são atendidas porJobScheduler
quando o dispositivo está realmenteidle
(aosp/1089779). TestScheduler
agora usa oExecutor
especificado corretamente para o executor de tarefas interno nos testes (aosp/1090749, link em inglês)
Versão 2.2.0
Versão 2.2.0
15 de agosto de 2019
androidx.work:work-*:2.2.0
é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link (em inglês).
Essa versão é idêntica a androidx.work:work-*:2.2.0-rc01
.
Alterações importantes feitas na versão 2.2.0 em comparação à 2.1.0
androidx.work:work-gcm:2.2.0
é um novo artefato Maven compatível com o uso de GCMNetworkManager como programador quando o Google Play Services está disponível para APIs de nível igual ou superior a 22. Essa é uma dependência opcional que ajuda no processamento em segundo plano mais confiável e com melhor desempenho em versões de API mais antigas. Se seu app usa o Google Play Services, adicione essa dependência ao arquivo do Gradle para ser automaticamente compatível com o GCMNetworkManager. Se o Google Play Services não estiver disponível, o WorkManager continuará retornando ao AlarmManager em dispositivos mais antigos.
Versão 2.2.0-rc01
30 de julho de 2019
androidx.work:work-*:2.2.0-rc01
é lançado. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).
Correções de bugs
- Correção de um bug na implementação de AlarmManager que fazia com que o Service fosse encerrado prematuramente. Em casos raros, isso resultava em uma
RejectedExecutionException
(aosp/1092374e b/138238197). - Adicionada uma solução alternativa para
NullPointerException
ao usar APIsJobScheduler
em alguns dispositivos (aosp/1091020) (b/138364061), (b/138441699).
Versão 2.2.0-beta02
19 de julho de 2019
androidx.work:work-*:2.2.0-beta02
é lançado. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).
Correções de bugs
- Remoção da dependência não intencional do Jacoco, introduzida no
2.2.0-beta01
.
Versão 2.2.0-beta01
17 de julho de 2019
androidx.work:work-*:2.2.0-beta01
é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link.
Novos recursos
androidx.work:work-gcm:2.2.0-beta01
é um novo artefato Maven compatível com o uso de GCMNetworkManager como programador quando o Google Play Services está disponível para APIs de nível igual ou superior a 22. Essa é uma dependência opcional que ajuda no processamento em segundo plano mais confiável e com melhor desempenho em versões de API mais antigas. Se seu app usa o Google Play Services, adicione essa dependência ao arquivo do Gradle para ser automaticamente compatível com o GCMNetworkManager. Se o Google Play Services não estiver disponível, o WorkManager continuará retornando ao AlarmManager em dispositivos mais antigos.
Correções de bugs
- Correção para
IllegalArgumentException
ao rastrear o estado da rede em tablets Nvidia Shield K1 (aosp/1010188).
Versão 2.1.0
Versão 2.1.0
11 de julho de 2019
Lançamento de androidx.work:work-*:2.1.0
. Essa versão é idêntica a androidx.work:work-*:2.1.0-rc01
.
Mudanças importantes desde a versão 2.0.1
work-runtime-ktx
agora exige Java 8. Se você encontrar algum problema, adicione o seguinte abuild.gradle
:kotlinOptions { jvmTarget = "1.8" }
- Foi adicionada a inicialização sob demanda, que cria o WorkManager
somente quando ele é referenciado (b/127497100). Para configurar o projeto para inicialização sob demanda:
- Desative o inicializador automático.
- Implemente
Configuration.Provider
no seu objetoApplication
personalizado. - Mude todas as referências de
WorkManager.getInstance()
paraWorkManager.getInstance(Context)
. Como parte dessa mudança, suspendemos o uso deWorkManager.getInstance()
. É sempre mais seguro chamar a nova substituição deWorkManager.getInstance(Context)
, mesmo que você não esteja inicializando sob demanda.
PeriodicWorkRequest
s agora são compatíveis com atrasos iniciais. Você pode usar o métodosetInitialDelay
emPeriodicWorkRequest.Builder
para definir um atraso inicial (b/111404867).- Adicionada a capacidade de delegar a um ou mais
WorkerFactory
s registrados usandoDelegatingWorkerFactory
b/131435993 (link em inglês). - Adicionada a capacidade de usar
Configuration.Builder.setTaskExecutor
para personalizar oExecutor
usado pelo WorkManager para todos os registros internos. - Adicionada a capacidade de criar classes de unidades testáveis
Worker
eListenableWorker
usandoTestWorkerBuilder
eTestListenableWorkerBuilder
no artefatowork-testing
.work-testing
agora atrai Kotlin como uma dependência e inclui várias extensões Kotlin por padrão.
- Adicionada contagem de tentativas de execução no
WorkInfo
(b/127290461). - Tipos de
Data
agora podem armazenar e recuperar bytes e matrizes de bytes. Isso NÃO muda o tamanho máximo dos objetosData
. - O WorkManager agora depende de
Room 2.1.0
, o que corrige alguns problemas do banco de dados.
Versão 2.1.0-rc01
27 de junho de 2019
androidx.work:work-*:2.1.0-rc01
é lançado. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).
Correções de bugs
- Corrigido um bug que fazia o aplicativo falhar ao executar jobs com
JobScheduler
enquanto um backup estava em andamento (b/135858602).
Versão 2.1.0-beta02
20 de junho de 2019
androidx.work:work-*:2.1.0-beta02
é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link.
Correções de bugs
- Agora,
TestListenableWorkerBuilder
usa o métodoWorkerFactory
correto ao criar instâncias deListenableWorker
(b/135275844). - Corrigido um bug que causava desvios nas janelas de execução para
WorkRequest
s devido ao término do processo (b/135272196).
Versão 2.1.0-beta01
13 de junho de 2019
androidx.work:work-*:2.1.0-beta01
é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link.
Correções de bugs
- O WorkManager agora depende de
Room 2.1.0
, o que corrige alguns problemas do banco de dados. - Remoção de algumas E/S do disco de inicialização no thread principal.
- Correção de um possível impasse no rastreamento de restrições (b/134361006).
- Cancelamento antecipado de tarefas inválidas atribuídas ao WorkManager (b/134058261).
- Adição de algumas chamadas defensivas às APIs do JobScheduler para dispositivos com comportamento inadequado.
Versão 2.1.0-alpha03
5 de junho de 2019
Lançamento de androidx.work:*:2.1.0-alpha03
.
Correções de bugs
- Documentação aprimorada para
PeriodicWorkRequest
s. - Agora,
WorkManagerTestInitHelper
usa o executor de segundo plano correto para testes. - Correções de problemas do SQLite ao lidar com grandes transações em alguns dispositivos (b/130182503).
- As dependências do WorkManager agora são mais granulares (b/133169148).
- Solução alternativa para bugs específicos do OEM na implementação de
JobScheduler
ao programar tarefas usando o WorkManager. - Melhorias no programador baseado em AlarmManager com relação aos ciclos de vida do serviço, que anteriormente causava falhas raras (b/133313734).
Versão 2.1.0-alpha02
16 de maio de 2019
Lançamento do WorkManager 2.1.0.0-alpha02. Essa versão contém várias APIs novas.
Mudanças na API
PeriodicWorkRequest
s agora são compatíveis com atrasos iniciais. Você pode usar o métodosetInitialDelay
emPeriodicWorkRequest.Builder
para definir um atraso inicial (b/111404867).Adicionada a capacidade de delegar a um ou mais
WorkerFactory
s registrados usandoDelegatingWorkerFactory
b/131435993 (link em inglês).Adicionada a capacidade de usar
Configuration.Builder.setTaskExecutor
para personalizar oExecutor
usado pelo WorkManager para todos os registros internos.Melhorada a documentação sobre
WorkRequest.keepResultsForAtLeast
(b/130638001)., inicialização sob demanda ePeriodicWorkRequest.Builder
(b/131711394).
Versão 2.1.0-alpha01
24 de abril de 2019
Lançamento do WorkManager 2.1.0-alpha01. Essa versão contém várias APIs novas. A partir dessa versão, haverá novos recursos sem backport com a versão 1.x. Recomendamos que você mude para 2.x.
Mudanças na API
- Foi adicionada a inicialização sob demanda, que cria o WorkManager
somente quando ele é referenciado (b/127497100). Para configurar o projeto para inicialização sob demanda:
- Desative o inicializador automático.
- Implemente
Configuration.Provider
no seu objetoApplication
personalizado. - Mude todas as referências de
WorkManager.getInstance()
paraWorkManager.getInstance(Context)
. Como parte dessa mudança, suspendemos o uso deWorkManager.getInstance()
. É sempre mais seguro chamar a nova substituição deWorkManager.getInstance(Context)
, mesmo que você não esteja inicializando sob demanda.
- Adicionada a capacidade de criar classes de unidades testáveis
Worker
eListenableWorker
usandoTestWorkerBuilder
eTestListenableWorkerBuilder
no artefatowork-testing
.work-testing
agora atrai Kotlin como uma dependência, mas também inclui várias extensões Kotlin por padrão.
- Adicionada contagem de tentativas de execução no
WorkInfo
(b/127290461). - Tipos de
Data
agora podem armazenar e recuperar bytes e matrizes de bytes. Isso NÃO muda o tamanho máximo dos objetosData
. - O uso de
CoroutineWorker.coroutineContext
foi suspenso. Esse campo foi digitado incorretamente como umCoroutineDispatcher
. Ele não é mais necessário, uma vez que você pode ir para o coroutineContext relevante no corpo da função de suspensão. RxWorker.createWork()
eRxWorker.getBackgroundScheduler()
agora estão anotados com tipos de retorno@NonNull
.
Versão 2.0.1
Versão 2.0.1
9 de abril de 2019
Lançamento do WorkManager 2.0.1. Essa versão é idêntica à 2.0.1-rc01.
Versão 2.0.1-rc01
3 de abril de 2019
Lançamento do WorkManager 2.0.1-rc01. Essa versão contém algumas correções de bugs. Para usuários da versão anterior 1.x, algumas dessas mudanças também aparecem em 1.0.1-rc01.
Correções de bugs
- Os testes Robolectric agora funcionam corretamente com o WorkManager (b/122553577).
- Corrigida uma falha de caso extremo com o rastreamento de restrições não sendo limpo nas APIs anteriores ao JobScheduler (b/129226383).
- Correção de um
StackOverflowError
que processa longas cadeias de trabalho (b/129091233). - A documentação de
PeriodicWorkRequest
s foi atualizada, indicando que o horário flexível não tem suporte na API de nível 23. - Correção de alguns links corrompidos na documentação do Kotlin.
Versão 2.0.0
Versão 2.0.0
20 de março de 2019
Lançamento do WorkManager 2.0.0. Esta versão é idêntica à 2.0.0-rc01 e é a versão AndroidX do 1.0.0 estável com dependências do AndroidX. Recomendamos usar essa versão como destino em vez das versões 1.x anteriores. Todo o desenvolvimento ativo é destinado à 2.x, e a 1.x recebe apenas correções de bugs essenciais por um tempo limitado.
Versão 2.0.0-rc01
7 de março de 2019
Lançamento do WorkManager 2.0.0-rc01. Essa versão é idêntica à 1.0.0 estável, mas tem dependências do AndroidX. Quando essa versão chegar à 2.0.0 estável, você deverá incluí-la, e as versões anteriores 1.x receberão apenas algumas correções de bugs essenciais. Todo o desenvolvimento ativo será destinado à 2.x.
Dependências anteriores ao AndroidX
Documentos de referência: 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") }
Versão 1.0.1
Versão 1.0.1
9 de abril de 2019
Lançamento do WorkManager 1.0.1. Essa versão é idêntica à 1.0.1-rc01.
É altamente recomendável que os usuários atualizem para o WorkManager 2.x, uma vez que haverá cada vez menos atualizações para as ramificação do 1.x daqui em diante. Além disso, APIs novas não serão lançadas para a biblioteca 1.x.
Versão 1.0.1-rc01
2 de abril de 2019
Lançamento do WorkManager 1.0.1-rc01. Essa versão contém algumas correções de bugs.
Correções de bugs
- Os testes Robolectric agora funcionam corretamente com o WorkManager (b/122553577).
- Corrigida uma falha de caso extremo com o rastreamento de restrições não sendo limpo nas APIs anteriores ao JobScheduler (b/129226383).
- Correção de um
StackOverflowError
que processa longas cadeias de trabalho (b/129091233).
Versão 1.0.0
Versão 1.0.0
5 de março de 2019
Essa é a versão estável 1.0.0 do WorkManager. Essa versão do WorkManager é idêntica à 1.0.0-rc02.
Versão 1.0.0-rc02
21 de fevereiro de 2019
Esse é o segundo candidato a lançamento para a versão estável 1.0.0 do WorkManager. Essa versão contém duas correções de bugs.
Correções de bugs
Worker
s são programados corretamente após uma falha no aplicativo (b/124546316).Worker
s que geram umaException
desmarcada agora são marcados corretamente comoFAILED
e não causam mais falha no processo do app.
Versão 1.0.0-rc01
14 de fevereiro de 2019
Esse é um candidato a lançamento para a versão estável 1.0.0 do WorkManager. Essa versão contém uma correção de bug.
Correções de bugs
- A implementação baseada em AlarmManager agora respeita corretamente as janelas
flex
para PeriodicWorkRequests (b/124274584).
Versão 1.0.0-beta05
6 de fevereiro de 2019
Essa versão contém algumas correções de bugs.
Correções de bugs
- Correção de um caso em que
JobScheduler.getPendingJob(...)
era usado na API 23 (b/123893059). - Correção de uma
NullPointerException
em dispositivos com Android 5.1 (API de nível 22) ou anterior (b/123835104).
Versão 1.0.0-beta04
4 de fevereiro de 2019
Essa versão contém algumas correções de bugs.
Correções de bugs
- Melhoria na programação de PeriodicWork para a implementação baseada no AlarmManager.
- Correção de um caso em que o WorkManager não rastreava corretamente as restrições durante o uso da implementação baseada no AlarmManager (b/123379508).
- Correção de um caso em que o WorkManager não repetia o trabalho no término do processo durante o uso da implementação baseada no AlarmManager (b/123329850).
- Correção de um caso que fazia o WorkManager vazar Wakelocks ao usar a implementação baseada no AlarmManager.
Versão 1.0.0-beta03
25 de janeiro de 2019
Essa versão contém algumas correções de bugs.
Correções de bugs
- Introdução de uma regressão
1.0.0-beta02
que fazia com que o trabalho não fosse executado corretamente em algumas situações (b/123211993). - Correção de um caso em que o trabalho não respeitava corretamente o tempo de espera (b/122881597).
- Correção de uma
ConcurrentModificationException
em dispositivos com Android 5.1 (API) ou versão anterior. Essa é uma continuação da correção em1.0.0-beta02
b/121345393 (link em inglês). - Adicionado
exported=false
para alguns componentes no nosso manifesto que estavam ausentes nessa anotação. - Incluídas informações sobre como o WorkManager interage com o SO na documentação do pacote.
Versão 1.0.0-beta02
15 de janeiro de 2019
Essa versão contém algumas correções de bugs.
Correções de bugs
- Correção de um caso extremo em que o trabalho periódico podia ser executado mais de uma vez por intervalo em dispositivos com Android 6.0 (API de nível 23) (b/121998363).
- Correção de uma
ConcurrentModificationException
em dispositivos com Android 5.1 (API de nível 22) ou anterior (b/121345393). - Correção da execução incorreta do trabalho quando Restrições não eram cumpridas em dispositivos com Android 5.1 (API de nível 22) ou anterior (b/122578012).
- Otimizado o manuseio da conclusão do trabalho para ganhar agilidade em alguns casos extremos (b/122358129).
- Foi adicionada uma mudança para solucionar possíveis disputas entre várias instâncias de
LiveData
usadas pela WorkManager. - Mudança para usar a dependência
Room
1.1.1
em vez de1.1.1-rc01
. Essas versões são idênticas ((b/122578011).
Versão 1.0.0-beta01
19 de dezembro de 2018
Essa versão não tem mudanças de API. Futuramente, espera-se que o WorkManager continue com a API estável até a próxima versão, a não ser que ocorra um problema crítico. Essa versão contém algumas correções de bugs.
Correções de bugs
- Os filhos cancelados anteriormente do trabalho pai concluído não serão mais executados. b/120811767
- Inicialização correta de classes de geração de registros (exibidas principalmente durante testes).
Versão 1.0.0-alpha13
12 de dezembro de 2018
Essa versão contém uma pequena mudança na API que será útil para alguns usuários do Kotlin.
Mudanças na API
androidx.work.Result
foi movido para ser uma classe interna deListenableWorker
. Isso evita conflitos de refatoração com a classeResult
de nível superior do Kotlin. Esta é uma mudança importante da API. b/120564418 (link em inglês).
Alterações interruptivas da API
androidx.work.Result
foi movido para ser uma classe interna deListenableWorker
.
Versão 1.0.0-alpha12
5 de dezembro de 2018
Essa versão contém alterações interruptivas da API. Consulte a seção Alterações interruptivas da API abaixo. Esta versão provavelmente será lançada como nossa primeira versão beta. alpha12
também contém extensas atualizações de documentação.
Mudanças na API
work-rxjava2
, um novo artefato, apresentaRxWorker
. Esse é umListenableWorker
que espera umSingle<Payload>
.- O suporte ao Firebase JobDispatcher foi removido devido à descontinuação de uso iminente. Isso significa que o artefato
work-firebase
não vai ser mais atualizado quando passarmos para a versão Beta. Pretendemos adicionar uma alternativa no futuro. - Junção de
Payload
comResult
.Result
agora é uma "classe fechada" com três implementações concretas, que você pode conseguir por meio deResult.success()
(ouResult.success(Data)
),Result.failure()
(ouResult.failure(Data)
) eResult.retry()
. SeusListenableFuture
s agora resultam emResult
em vez dePayload
.Worker
s não têm métodos getter e setter para a saídaData
. Essa é uma alteração interruptiva. - Foram adicionados
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
,Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
e variantes para oferecer melhor suporte a URIs de conteúdo de acionamento lento (b/119919774). - Adição da variante
WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
. Este método requer a API 26. - Adicionados métodos de extensão Kotlin
Operation.await()
eListenableFuture.await()
. - A função
Operation.getException()
foi renomeada comoOperation.getThrowable()
. Essa é uma alteração interruptiva. - A classe
ContentUriTriggers
e os métodos que se referem a ela não estão mais disponíveis para uso público. Essa é uma alteração interruptiva. - Removido o restante dos métodos varargs em
WorkManager
,WorkContinuation
eOneTimeWorkRequest
para simplificar a API. Para corrigir qualquer problema de compilação, você pode agrupar varargs já existentes comArrays.asList(...)
. Também incluímos versões de argumento único de cada método. Essa é uma alteração interruptiva. - Removidas as variantes
WorkContinuation.combine(OneTimeWorkRequest, *)
. Elas apresentavam uma API confusa. Os métodoscombine
já existentes são mais compreensíveis. Essa é uma alteração interruptiva.
Correções de bugs
- As implementações pré-Marshmallow agora são mais confiáveis na recuperação da interrupção do processo de uma tarefa que já está em execução.
- O
LiveData
que é observado comobserveForever
é rastreado pela WorkManager. Essa é uma retrocompatibilidade de uma correção da biblioteca Room b/74477406 (link em inglês) Data.Builder.build()
agora gera uma exceção quando o objeto serializado excede ao tamanho máximo. Antes, isso só acontecia em um encadeamento em segundo plano quando não era possível gerenciar isso corretamente.- Maior diferenciação entre o trabalho parado e o cancelado.
getWorkInfoById()
retornará umWorkInfo
com oCANCELLED
State
duranteListenableWorker.onStopped()
. - Trate
null
Result
s como falhas emListenableWorker
(b/120362353). - Correção especulativa para Shield Tablets com a API 24, que às vezes gerava uma
IllegalArgumentException
(b/119484416).
Alterações interruptivas da API
- O suporte ao Firebase JobDispatcher foi removido devido à descontinuação de uso iminente. Isso significa que o artefato
work-firebase
não vai ser mais atualizado quando passarmos para a versão Beta. Pretendemos adicionar uma alternativa no futuro. - Junção de
Payload
comResult
.Result
agora é uma "classe fechada" com três implementações concretas, que você pode conseguir por meio deResult.success()
(ouResult.success(Data)
),Result.failure()
(ouResult.failure(Data)
) eResult.retry()
. SeusListenableFuture
s agora resultam emResult
em vez dePayload
.Worker
s não têm métodos getter e setter para a saídaData
. - Adicionados métodos de extensão Kotlin
Operation.await()
eListenableFuture.await()
. Operation.getException()
foi renomeado comoOperation.getThrowable()
.- A classe
ContentUriTriggers
e os métodos que se referem a ela não estão mais disponíveis para uso público. - Removido o restante dos métodos varargs em
WorkManager
,WorkContinuation
eOneTimeWorkRequest
para simplificar a API. Para corrigir qualquer problema de compilação, você pode agrupar varargs já existentes comArrays.asList(...)
. Também incluímos versões de argumento único de cada método. - Removidas as variantes
WorkContinuation.combine(OneTimeWorkRequest, *)
. Elas apresentavam uma API confusa. Os métodoscombine
já existentes são mais compreensíveis.
Versão 1.0.0-alpha11
8 de novembro de 2018
Esta versão contém muitas alterações que deixarão a API estável na beta
.
Existem mudanças importantes na API nessa versão. Consulte a seção Mudanças importantes da API abaixo.
Mudanças na API
work-runtime-ktx
introduz um novoCoroutineWorker
.WorkStatus
foi renomeado comoWorkInfo
. Todas as variantes correspondentes do métodogetStatus
foram renomeadas para as variantesgetWorkInfo
correspondentes. Essa é uma alteração interruptiva.ListenableWorker.onStopped()
não aceita mais ter um argumento booleano indicando seWorkRequest
foi cancelado.WorkManager
não faz mais essa distinção. Essa é uma alteração interruptiva.- O pacote
androidx.work.test
foi renomeado comoandroidx.work.testing
. Essa é uma alteração interruptiva. - Setters em
Constraints
não fazem mais parte da API pública. Essa é uma alteração interruptiva.. WorkerParameters.getTriggeredContentUris()
eWorkerParameters.getTriggeredContentAuthorities()
antes retornavam matrizes. Agora, esses métodos retornam coleções. Essa é uma alteração interruptiva.ListenableWorker.onStartWork()
foi renomeado comoListenableWorker.startWork()
. Essa é uma alteração interruptiva.- O construtor do
WorkStatus
não faz mais parte da API pública. Essa é uma alteração interruptiva. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
são renomeados comoConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
, respectivamente. Essa é uma alteração interruptiva.- Adicionadas muitas anotações
@NonNull
à API pública para melhorar a ergonomia da API. - Adicionada API
WorkManager.enqueueUniqueWork()
para enfileirarOneTimeWorkRequest
s exclusivas sem precisar criar umWorkContinuation
. - Todas as variantes dos métodos
enqueue
ecancel
emWorkManager
agora retornam um novo tipoOperation
. Essa é uma alteração interruptiva. - Todas as variantes de
enqueue
não aceitam mais varargs paraWorkRequest
s. Essa é uma alteração interruptiva. Use Coleções em vez disso. Você pode usarArrays.asList()
para modificar o código existente. Fizemos isso para reduzir a superfície da API e a contagem de métodos. - A tentativa de
initialize
WorkManager
mais de uma vez por processo agora resulta em umaIllegalStateException
. Essa é uma alteração interruptiva.
Correções de bugs
WorkRequest.Builder
s no artefatowork-runtime-ktx
agora usamListenableWorker
s. Corrige b/117666259.- Verifique se o próximo tempo de execução para
PeriodicWork
será no futuro. Corrige b/118204399. - Remover possível E/S do disco ao usar a WorkManager na inicialização do app. Corrige b/117796731.
- Corrigir uma disputa em
WorkConstraintsTracker
. Corrige android-workmanager/issues/56
Alterações interruptivas da API
WorkStatus
foi renomeado comoWorkInfo
. Todas as variantes correspondentes do métodogetStatus
foram renomeadas para as variantesgetWorkInfo
correspondentes.ListenableWorker.onStopped()
não aceita mais ter um argumento booleano indicando seWorkRequest
foi cancelado.WorkManager
não faz mais essa distinção.- O pacote
androidx.work.test
foi renomeado comoandroidx.work.testing
. - Os setters em
Constraints
não fazem mais parte da API pública. WorkerParameters.getTriggeredContentUris()
eWorkerParameters.getTriggeredContentAuthorities()
antes retornavam matrizes. Agora, esses métodos retornam Coleções.ListenableWorker.onStartWork()
foi renomeado comoListenableWorker.startWork()
.- O construtor do
WorkStatus
não faz mais parte da API pública. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
são renomeados comoConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
, respectivamente.- Todas as variantes dos métodos
enqueue
ecancel
emWorkManager
agora retornam um novo tipoOperation
. - Todas as variantes de
enqueue
não aceitam mais varargs paraWorkRequest
s. - A tentativa de
initialize
WorkManager
mais de uma vez por processo agora resulta em umaIllegalStateException
.
Versão 1.0.0-alpha10
11 de outubro de 2018
Essa versão é compatível com o trabalho assíncrono controlado pelo desenvolvedor. Existem mudanças importantes na API nessa versão. Consulte a seção Mudanças importantes da API abaixo.
Prevemos que a WorkManager estará entrando nas fases finais do período Alfa. Esperamos ter uma API estável em versão Beta. Por isso, pedimos que envie seu feedback sobre nosso rastreador de problemas.
Mudanças na API
- Removidos todos os métodos e classes
deprecated
anteriores, principalmente o construtor padrãoWorker
. Essa é uma alteração interruptiva da API. NonBlockingWorker
foi renomeado paraListenableWorker
, que agora é uma classe pública reexibida e pronta para uso.ListenableWorker
fornece acesso a um método abstrato,ListenableFuture<Payload> onStartWork()
, que é chamado na linha de execução principal. Cabe a você iniciar e processar o trabalho de forma assíncrona. Quando terminar, atualizeListenableFuture
corretamente. As implementações de referência deListenableFuture
s são fornecidas no pacoteFutures
emalpha02
(veja abaixo a seçãoWorkManager
).Worker
estendeListenableWorker
e ainda funciona como antes, com um métodoResult doWork()
abstrato.- Alguns métodos e membros foram embaralhados de
Worker
paraListenableWorker
. - Em breve, forneceremos implementações de referência para
ListenableWorker
s que usam corrotinas Kotlin (assim que as versões estáveis forem lançadas) e RxJava2.
- A interface
WorkerFactory
e a implementação concretaDefaultWorkerFactory
foram mescladas em uma classe abstrata chamadaWorkerFactory
. A implementação assegura que o comportamento padrão baseado em reflexão seja chamado como um esforço de última hora para qualquer instânciaWorkerFactory
criada pelo usuário. Essa é uma alteração interruptiva. - Removidos
WorkManager.synchronous()
eWorkContinuation.synchronous()
e todos os métodos relacionados.ListenableFuture<Void>
foi adicionado como o tipo de retorno de vários métodos na API. Essa é uma alteração interruptiva da API.- Agora
ListenableFuture
s podem ser usados para trabalho e observação de forma assíncrona. Por exemplo,WorkManager.enqueue()
retornavavoid
e agora retorna umListenableFuture<Void>
. Você pode chamarListenableFuture.addListener(Runnable, Executor)
ouListenableFuture.get()
para executar o código depois que a operação é concluída. - Observe que esses
ListenableFuture
s não informam se a operação foi bem-sucedida ou falhou, apenas que ela foi concluída. Você ainda precisará encadear os métodos da WorkManager para descobrir essas informações. - Ignoramos as chamadas
cancel()
nesses objetos porque elas são confusas e difíceis de compreender (você está cancelando a operação ou o trabalho resultante?). Isso está no contratoFuture
s. - Para manter a paridade com os métodos
getStatus*
síncronos, fornecemos variantesListenableFuture
e renomeamos os já existentes que retornaramLiveData
para ter explicitamente "LiveData" como parte do nome (por exemplo,getStatusesByIdLiveData(UUID)
). Essa é uma alteração interruptiva da API.
- Agora
Correções de bugs
- Correção do problema conhecido de alpha09 com relação a arquivos
androidx-annotations.pro
duplicados. Você pode remover a solução alternativa das notas da versão anteriores excluindoexclude 'META-INF/proguard/androidx-annotations.pro'
do arquivo do Gradle. - Configurações do ProGuard foram adicionadas para manter o novo construtor
Worker
(b/116296569). - Correção de possível
NullPointerException
em uma disputa em que o trabalho eraREPLACE
(b/116253486 e b/116677275). WorkContinuation.combine()
agora aceita um ou maisWorkContinuation
s em vez de dois ou mais (b/117266752).
Alterações interruptivas da API
- Removidos todos os métodos e classes
deprecated
anteriores, principalmente o construtor padrãoWorker
. - A interface
WorkerFactory
e a implementação concretaDefaultWorkerFactory
foram mescladas em uma classe abstrata chamadaWorkerFactory
. - Removidos
WorkManager.synchronous()
eWorkContinuation.synchronous()
. - Métodos
WorkManager.getStatus*()
agora retornamListenableFuture
s.WorkManager.getStatus*LiveData()
retornaLiveData
s.
Versão 1.0.0-alpha09
19 de setembro de 2018
Problema conhecido
Se você encontrar o seguinte problema: "Mais de um arquivo foi encontrado com o caminho independente do SO 'META-INF/proguard/androidx-annotations.pro'", coloque o seguinte no seu arquivo do Gradle como uma solução temporária enquanto corrigimos o problema em alpha10:
Groovy
android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }
Kotlin
android { packagingOptions { exclude("META-INF/proguard/androidx-annotations.pro") } }
Correções de bugs
- Adição de outra correção necessária para o erro "100 jobs" (b/115560696).
- Foram adicionadas algumas correções para erros de restrição de chave externa devido a disputas (b/114705286).
- Chamadas
ConstraintTrackingWorker.onStopped(boolean)
foram delegadas para oWorker
subjacente (b/114125093). - Imposição do atraso mínimo de retirada correto para o Firebase JobDispatcher (b/113304626).
- Melhoradas as garantias de encadeamento internas para a biblioteca.
- Corrigido um possível problema com a deduplicação de
LiveData
internamente.
Mudanças na API
- Agora você pode criar suas instâncias
Worker
no momento da execução especificando umaWorkerFactory
como parte daWorkManager.Configuration
. A fábrica de substituição éDefaultWorkerFactory
, que corresponde ao comportamento das versões anteriores da WorkManager.- Os construtores padrão para
Worker
eNonBlockingWorker
agora estão marcados como obsoletos. Use o novo construtor (Worker(Context, WorkerParameters)
) e chamesuper(Context, WorkerParameters)
. Futuras versões da WorkManager vão remover o construtor padrão.
- Os construtores padrão para
- Começamos a usar o novo artefato
ListenableFuture
internamente (sem dependências do Guava). Introduziremos o ListenableFutures à API nas próximas versões. Essa mudança vai oferecer suporte com o eventual envio deNonBlockingWorker
. - Foi adicionada a capacidade de acionar o trabalho cronometrado no
TestDriver
usandoTestDriver.setInitialDelayMet(UUID)
eTestDriver.setPeriodDelayMet(UUID)
(b/113360060).
Mudanças importantes
- O uso dos construtores padrão
Worker
eNonBlockingWorker
foi suspenso. Migre para o novo construtor o mais rápido possível. Versões futuras removerão o construtor padrão.
Versão 1.0.0-alpha08
27 de agosto de 2018
Correções de bugs
- Os componentes da WorkManager foram explicitamente identificados como sem reconhecimento de inicialização direta para que não sejam acionados nessa fase. No futuro, forneceremos uma versão da WorkManager com reconhecimento de inicialização direta (b/112665532).
- Correção de um problema em que o trabalho repetido não era executado (b/112604021).
- Correção de trabalho periódico fixo não executado repetidamente (relacionado ao problema acima). b/112859683
- Políticas de retirada respeitadas quando o processo do app já está em execução.
- Correção das mensagens de exceção em
Data
para indicar que o limite é 10 KB. - Redução do valor máximo de
Configuration.setMaxSchedulerLimit(int)
para 50, a fim de compensar a latência na conclusão do processamento doJobScheduler
(b/112817355).
Versão 1.0.0-alpha07
16 de agosto de 2018
Correções de bugs
- Correção de uma possível consulta SQL com limites negativos que poderia retornar um número ilimitado de resultados.
- O trabalho cuja execução foi concluída agora cancela corretamente todas as cópias pendentes desse trabalho em outros Programadores. Isso fez com que o limite de tarefas do
JobScheduler
fosse excedido (b/111569265). - Correção de uma
ConcurrentModificationException
emConstraintTracker
(b/112272753). - Mudadas as anotações de tipo de retorno de
Data.getBooleanArray(String)
eData.getIntArray(String)
para@Nullable
em vez de@NonNull
(b/112275229).
Mudanças na API
Worker
agora estende uma nova classe,NonBlockingWorker
. Isso não afeta nenhum uso atual. No futuro,NonBlockingWorker
vai se tornar uma entidade com suporte total a soluções de linha de execução personalizadas.- Mudadas as anotações de tipo de retorno de
Data.getBooleanArray(String)
eData.getIntArray(String)
para@Nullable
em vez de@NonNull
(b/112275229). - Extensões Kotlin: suspensão do uso de
Map.toWorkData()
e adição de umworkDataOf(vararg Pair<String, Any?>)
de nível superior para ser mais consistente com as APIs já existentes.
Versão 1.0.0-alpha06
1º de agosto de 2018
Correções de bugs
- Impedir um bloqueio de banco de dados ao programar o trabalho (b/111801342).
- Corrigido um bug que fazia com que o
PeriodicWork
não fosse executado na programação durante o modo Soneca (b/111469837). - Corrigida uma disputa ao rastrear restrições que causava falhas no
WorkManager
(googlecodelabs/android-workmanager/issues/56). - Criadas
WorkRequest
s exclusivas ao usarWorkRequest.Builder#build()
(b/111408337). - Permissão do uso de
RescheduleReceiver
somente quando houverWorkRequest
s que precisem dele (b/111765853).
Versão 1.0.0-alpha05
24 de julho de 2018
Mudanças na API
- O
WorkManager.getInstance()
agora é anotado com@NonNull
em vez de@Nullable
. Agora, se o singleton não é inicializado corretamente manualmente, o método gera umaIllegalStateException
. Essa é uma alteração interruptiva da API. - Foi adicionada uma nova API,
Configuration.Builder.setMinimumLoggingLevel(int)
, que pode controlar o detalhamento da WorkManager. Por padrão, a WorkManager registraLog.INFO
e acima. - Mudança da assinatura de
Data.getString()
, para que ela não aceite mais um valor padrão (é implicitamentenull
). Essa é uma alteração interruptiva da API. - Marcados alguns métodos necessários apenas para uso interno como
@hide
. Isso inclui o construtorConstraints
,Data.toByteArray()
eData.fromByteArray(byte[])
. Essa é uma alteração interruptiva da API.
Correções de bugs
- A WorkManager não executa mais o trabalho durante casos conhecidos de backup automático. Isso poderia ter causado uma falha (b/110564377).
- Correção da programação dupla de
PeriodicWorkRequest
s ao usar oJobScheduler
(b/110798652). - Correção de um problema com
PeriodicWorkRequest
s que não eram executados corretamente depois da ativação do modo Soneca no dispositivo (b/111469837). - Correção de um problema com atrasos iniciais ao usar o Firebase JobDispatcher (b/111141023).
- Correção de certos problemas de disputa e timing em potencial.
- Liberação devida de
BroadcastReceiver
s que não eram mais necessários. - Otimização do desempenho de reprogramação quando os apps são reiniciados após o fechamento forçado.
- Concedida a permissão para
TestScheduler.setAllConstraintsMet(UUID)
ser chamado antes ou depois de enfileirar oWorkRequest
especificado (b/111238024).
Mudanças importantes
- O
WorkManager.getInstance()
agora é anotado com@NonNull
em vez de@Nullable
. - Mudança da assinatura de
Data.getString()
, para que ela não aceite mais um valor padrão (é implicitamentenull
). - Marcados alguns métodos necessários apenas para uso interno como
@hide
. Isso inclui o construtorConstraints
,Data.toByteArray()
eData.fromByteArray(byte[])
.
Versão 1.0.0-alpha04
26 de junho de 2018
Correções de bugs
PeriodicWorkRequest
s agora são reprogramadas corretamente ao usar a implementação baseada emAlarmManager
.- Corrigido um possível ANR ao reprogramar todos os workers após um fechamento forçado ou uma reinicialização (b/110507716).
- Adição de anotações de anulação a várias APIs da WorkManager (b/110344065).
- Registro de exceções não identificadas que ocorrem durante a execução do Worker (b/109900862).
- Permissão de migrações de banco de dados destrutivas caso você decida reverter para uma versão mais antiga da WorkManager (b/74633270).
- Correção de uma falha de migração ao criar tags implícitas duplicadas. Esse é um problema muito raro que ocorria apenas se você utilizasse o mesmo formato de tag implícito.
Versão 1.0.0-alpha03
19 de junho de 2018
Correções de bugs
Correção de uma disputa na implementação baseada no
AlarmManager
(b/80346526).Correção de jobs duplicados ao usar o
JobScheduler
após a reinicialização do dispositivo.Jobs com acionadores de URI de conteúdo agora persistem entre reinicializações (b/80234744).
Atualizações de documentação (b/109827628, b/109758949, b/80230748).
Correção de uma falha ao reposicionar um
WorkRequest
na fila (b/109572353).Correção de avisos do compilador Kotlin ao usar a dependência
work-runtime-ktx
.A WorkManager agora usa
Room
versão1.1.1-rc1
.
Mudanças na API
- Adição de
getStatusesSync()
, a versão síncrona deWorkContinuation.getStatuses()
. Worker
consegue distinguir entre o cancelamento iniciado pelo usuário e a interrupção temporária solicitada pelo SO.Worker.isStopped()
retornatrue
quando qualquer tipo de interrupção é solicitado.Worker.isCancelled()
retornatrue
quando o trabalho foi explicitamente cancelado (b/79632247).- Foi adicionado suporte a JobParameters#getNetwork() na API de nível 28. Ele é exposto por
Worker.getNetwork()
. - Adicionado
Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
para que você possa impor quantos jobs podem ser enviados paraJobScheduler
ouAlarmManager
. Isso ajuda a evitar que oWorkManager
assuma todos os slotsJobScheduler
disponíveis. - Adição de
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
que ajuda a definir um intervalo de IDs de jobs doJobScheduler
seguros para oWorkManager
(b/79996760). Worker.getRunAttemptCount()
retorna a contagem de execução atual para um determinadoWorker
(b/79716516).WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
permite enfileirarPeriodicWorkRequest
s exclusivos (b/79600647).WorkManager.cancelAllWork()
cancela todos osWorker
s. As bibliotecas que dependem deWorkManager
podem consultar quando esse método foi chamado pela última vez, usandoWorkManager.getLastCancelAllTimeMillis()
para limpeza adicional do estado interno.- Adição de
WorkManager.pruneWork()
para remover os jobs concluídos do banco de dados interno (b/79950952, b/109710758).
Mudanças de comportamento
- Adicionada uma tag implícita para todos os
WorkRequest
s, que é o nome da classe totalmente qualificado doWorker
. Isso permite removerWorkRequest
s semtag
s ou quandoid
não está disponível (b/109572351).
Mudanças importantes
Worker.WorkerResult
foi renomeado comoWorker.Result
.Worker.onStopped
agora tem um parâmetro extraisCancelled
definido comotrue
quandoWorker
tiver sido explicitamente cancelado.
Versão 1.0.0-alpha02
24 de maio de 2018
Correções de bugs
- Correção de um
NullPointerException
emState.isFinished()
(b/79550068). - Correção de um problema que fazia com que
Worker
s fossem reprogramados emApplication.onCreate()
(b/79660657). - Correção de um problema em que era possível programar mais trabalho do que o permitido pelo SO (b/79497378).
- Mudança da limpeza de wake locks associados a
Worker
s para a linha de execução em segundo plano. - A implementação
AlarmManager
agora é limpa corretamente quando todos os trabalhos pendentes são concluídos. - Corrigidas consultas SQL de limpeza que afetavam localidades que não falam inglês (b/80065360).
- Suporte adicionado para
float
s emData
(b/79443878). Data.Builder.putAll()
agora retorna uma instância deBuilder
(b/79699162).- Mais Javadoc e correções na documentação (b/79691663).
Mudanças na API
Worker
s podem reagir à própria interrupção.Worker.isStopped()
pode ser usado para verificar se umWorker
foi interrompido.Worker.onStopped()
pode ser usado para executar operações de limpeza leves.- A API
Worker.getTags()
retorna umSet
de tags associadas aoWorker
. - Adicionadas sobrecargas de
javax.time.Duration
para APIs que usam uma combinação de duração eTimeUnit
s. Isso é protegido por@RequiresApi(26)
. - As extensões do
WorkManager
foram movidas do pacoteandroidx.work.ktx
para o pacoteandroidx.work
. O uso das extensões antigas foi descontinuado, e elas vão ser removidas em uma versão futura. - O uso de
Configuration.withExecutor()
foi descontinuado. UseConfiguration.setExecutor()
.
Versão 1.0.0-alpha01
8 de maio de 2018
O WorkManager simplifica a programação e a execução de
trabalhos em segundo plano garantidos e com reconhecimento de restrições. Essa versão inicial é 1.0.0-alpha01
.