WorkManager
Atualização mais recente | Versão estável atual | Próximo candidato a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
2 de dezembro de 2020 | 2.4.0 | - | 2.5.0-beta02 | - |
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:
dependencies { def work_version = "2.4.0" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" }
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 versão.
Feedback
Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas existentes (link em inglês) nesta biblioteca antes de criar um novo. Adicione seu voto a um problema existente clicando no botão de estrela.
Consulte a documentação do Issue Tracker para saber mais.
Versão 2.5.0
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
- Correção de 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
WorkManager
limita automaticamente o número deWorkRequest
s que podem ser selecionados pelo programador de processos. As solicitações ainda são executadas na ordem FIFO (aosp/1455228).WorkManager
tenta recuperar 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 essas 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 compatibilidade aprimorada com 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 essas 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
- Processar
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 essas 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 é compatível com o 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 procurar
WorkInfo
s usando umWorkQuery
. Isso é útil quando os desenvolvedores querem procurarWorkInfo
s por meio de 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 falhou 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 escalonador de processos (aosp/1203944).Disponibilizada a compatibilidade com a adição dinâmica de fábrica para delegar 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). - Especificação de IDs do JobScheduler que o WorkManager precisa usar com as APIs do JobService diretamente (aosp/1233567).
- Adição de uma nova regra de lint que garante que as implementações de
ListenableWorker
agora sejampublic
ao usar oWorkerFactory
padrão (aosp/1291262).
- Uso do
As chamadas para
setForegroundAsync()
que não forem concluídas antes da conclusão de umListenableWorker
agora serão sinalizadas usando umIllegalStateException
noListenableFuture
retornado (aosp/1262743).Correção de 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 essas confirmações (link em inglês).
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, link em inglês).
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 essas confirmações (link em inglês).
Correções de bugs
- Correção de 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). - Disponibilizada a compatibilidade com a adição dinâmica de fábrica para delegar 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 essas confirmações (link em inglês).
Novos recursos
- O WorkManager agora é compatível com o RxJava 3. Para usar o RxJava 3, inclua a seguinte dependência:
implementation "androidx.work:work-rxjava3:2.4.0-alpha03"
(aosp/1277904). - Adição de uma nova regra de lint que garante que as implementações de
ListenableWorker
agora sejampublic
ao usar oWorkerFactory
padrão (aosp/1291262).
Mudanças na API
- As chamadas para
setProgressAsync()
depois da execução de umListenableWorker
sinalizarão umException
por meio doListenableFuture
(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 essas confirmações (link em inglês).
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 procurar
WorkInfo
s usando umWorkQuery
. Isso é útil quando os desenvolvedores querem procurarWorkInfo
s por meio de 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 forem concluídas antes da conclusão de umListenableWorker
agora serã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 essas confirmações (link em inglês).
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 falhou 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 escalonador de processos (aosp/1203944, link em inglês).
Correções de bugs
setProgress()
foi suspenso emRxWorker
depois de retornar umSingle<Void>
que é um tipo impossível. Adição de uma nova APIsetCompletableProgress()
, que retorna umCompletable
; e de novas regras de lint, que ajudam a migrar para as novas APIs (b/150080946, aosp/1242665, links em inglês).
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 essas confirmações (link em inglês).
Correções de bugs
- Correção de 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 essas confirmações (link em inglês).
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, links em inglês).
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 (link em inglês).
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 essas confirmações (link em inglês).
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, links em inglês).
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 essas confirmações (link em inglês).
Mudanças importantes desde a versão 2.2.0
- Compatibilidade com execuções longas ou trabalhos importantes por meio de
ListenableWorker#setForegroundAsync()
. - Compatibilidade com o Worker Progress por meio do
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 essas 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 essas confirmações (link em inglês).
Novos recursos
- Adição de uma mensagem de erro melhor para exceções SQLite não recuperáveis (aosp/1185777).
- Adição de 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, links em inglês).
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, links em inglês).
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 essas confirmações (link em inglês).
Novos recursos
- 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
- Adição da 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 paraForegroundInfo.getForegroundServiceType()
para ser mais consistente com as APIs de plataforma subjacentes (b/142729893, aosp/1143316, links em inglês)
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 essas confirmações (link em inglês).
Novos recursos
- O WorkManager agora é compatível com 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 aos 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 aqui (link em inglês).
Novos recursos
ListenableWorker
s agora podem definir o progresso por meio da APIsetProgressAsync()
. Também foi adicionada uma APIsuspend
-ingsetProgress
correspondente emCoroutineWorker
e umasetProgress
emRxWorker
, que retorna umSingle<Void>
. Com essas novas APIs, os Workers podem transmitir informações de andamento por meio deWorkInfo
, 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. - Adicionada capacidade de especificar um
InputMergerFactory
por meio de umConfiguration.setInputMergerFactory
. (b/133273159, link em inglês)
Mudanças na API
- O WorkManager gerará uma instância de
IllegalStateException
se umWorkerFactory
retornar 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 aqui (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, link em inglês) (b/138364061, link em inglês), (b/138441699, link em inglês)
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 aqui (link em inglês).
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" }
- Adicionada a inicialização sob demanda, que criará o WorkManager
somente quando ele for 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çãoWorkManager.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 personalizar o
Executor
usado pelo WorkManager para todos os seus registros internos por meio deConfiguration.Builder.setTaskExecutor
. - 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
- Correção de 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 aqui.
Correções de bugs
- Agora,
TestListenableWorkerBuilder
usa o métodoWorkerFactory
correto ao criar instâncias deListenableWorker
(b/135275844). - Correção de 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 aqui.
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 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 personalizar o
Executor
usado pelo WorkManager para todos os seus registros internos por meio deConfiguration.Builder.setTaskExecutor
.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 retrocompatibilidade com a versão 1.x. Recomendamos que você mude para 2.x.
Mudanças na API
- Adicionada a inicialização sob demanda, que criará o WorkManager
somente quando ele for 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çãoWorkManager.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).
- Correção de 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). - Atualização da documentação de
PeriodicWorkRequest
s, indicando que o horário flexível não é compatível com a 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 será destinado à 2.x, e a 1.x receberá 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
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" }
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).
- Correção de 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 as 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).
- 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 alterações 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 doListenableWorker
.
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>
.- A compatibilidade com o Firebase JobDispatcher foi removida devido à suspensão de uso iminente. Isso significa que o artefato
work-firebase
não 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. - Adicionadas variantes
Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
eConstraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
para oferecer melhor compatibilidade com URIs de conteúdo de acionamento lento (b/119919774). - Adicionada 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.
LiveData
observados por meio deobserveForever
são rastreados 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
- A compatibilidade com o Firebase JobDispatcher foi removida devido à suspensão de uso iminente. Isso significa que o artefato
work-firebase
não 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
oWorkManager
mais de uma vez por processo agora resultará 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/117666259. - 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 (link em inglês)
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 resultará 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 alterações interruptivas na API nessa versão. Consulte a seção Alterações interruptivas 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 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:
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
- Adição de 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.
- Correção de 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 removerão 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 será compatível com o eventual envio deNonBlockingWorker
. - Adicionada capacidade de acionar o trabalho cronometrado no
TestDriver
por meio deTestDriver.setInitialDelayMet(UUID)
eTestDriver.setPeriodDelayMet(UUID)
b/113360060 (link em inglês)
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 durante a inicialização direta. 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, para 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 (link em inglês)
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 totalmente compatível com 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 (link em inglês) - 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 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).
- Correção de um bug que fazia com que o
PeriodicWork
não fosse executado na programação durante o modo Soneca (b/111469837). - Correção de uma disputa ao rastrear restrições que causava falhas no
WorkManager
. googlecodelabs/android-workmanager/issues/56 (em inglês). - Criar
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 for inicializado corretamente em casos de inicialização manual, o método gerará umaIllegalStateException
. Essa é uma alteração interruptiva da API. - 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 (link em inglês)
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
.- Correção de 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 no caso de você decidir 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).- Adição de compatibilidade para JobParameters#getNetwork() na API 28. Isso é exposto por meio de
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 (link em inglês)
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 as localidades que não falam inglês (b/80065360).
- Adicionada a compatibilidade com
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 pacoteandroix.work
. O uso das extensões antigas foi suspenso, e elas serão removidas em uma versão futura. Configuration.withExecutor()
foi suspenso. 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
.