O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

WorkManager

A API do WorkManager facilita a programação de tarefas adiáveis e assíncronas que precisam ser executadas de maneira confiável. Essas APIs permitem criar uma tarefa e entregá-la ao WorkManager para execução quando as restrições de trabalho forem atendidas.

Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
14 de outubro de 2020 2.4.0 - - 2.5.0-alpha03

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 compilaçã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.

Criar uma nova edição

Consulte a documentação do Issue Tracker para saber mais.

Versão 2.5.0

Versão 2.5.0-alpha03

14 de outubro de 2020

Lançamento de androidx.work:work-*:2.5.0-alpha03. A versão 2.5.0-alpha03 contém estas confirmações..

Mudanças na API

  • TestListenableWorkerBuilder e TestWorkerBuilder 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 e RemoteWorkContinuation. 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

Lançamento do androidx.work:work-*:2.5.0-alpha02. A versão 2.5.0-alpha02 contém essas confirmações.

Novos recursos

  • Adição de uma API ao WorkQuery para usar ids para consultar WorkInfos (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). O processName é 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 e RemoteWorkContinuation para solicitações de trabalho enqueue, cancel e query. Essas APIs não incluem variantes LiveData para evitar a contenção de SQLite em processos múltiplos. Todas as chamadas para enqueue, cancel e query são encaminhadas para um processo primary do app usando AIDL e retornam um ListenableFuture fluente (aosp/1392657, aosp/1411210, aosp/1412215, aosp/1417713).

Mudanças na API

  • O WorkManager agora remove de forma mais agressiva as WorkRequests concluídas que não têm dependências incompletas. A duração do buffer foi modificada de 7 dias para 1 dia (aosp/1419708).

Correções de bugs

  • O WorkManager agora reconcilia jobs proativamente para que jobs WorkRequests e JobScheduler estejam sincronizados quando o WorkManager 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 SecurityExceptions ao rastrear o estado da rede em alguns dispositivos (aosp/1396969).

Contribuição externa

Versão 2.4.0

Versão 2.4.0

22 de julho de 2020

Lançamento do androidx.work:work-*:2.4.0. 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 WorkManagers agora está mais capacitado. Anteriormente, o Scheduler de processos considerava apenas a execução de trabalhos que não atrasavam e cujas restrições eram atendidas. O escalonador de processos agora monitora WorkRequests que podem ser executados no futuro, incluindo PeriodicWorkRequests. O Scheduler de processos também não observa os limites de programação, mas ainda está restrito ao tamanho do Executor 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, o WorkManager também introduz um novo RunnableScheduler 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 WorkInfos usando um WorkQuery. Isso é útil quando os desenvolvedores querem procurar WorkInfos por meio de uma combinação de vários atributos. Para saber mais, consulte WorkQuery.Builder.fromStates(...), WorkQuery.Builder. fromTags(...) ou WorkQuery.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 a APPEND, 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 APIs setForegroundAsync() (b/147873061, aosp/1215915, link em inglês).
    • 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 sejam public ao usar o WorkerFactory padrão (aosp/1291262)
  • As chamadas para setForegroundAsync() que não forem concluídas antes da conclusão de um ListenableWorker agora serão sinalizadas por meio de um IllegalStateException no ListenableFuture retornado (aosp/1262743)

  • Correção de um bug em que o ForegroundService não é interrompido depois que um Worker em primeiro plano é interrompido. (b/155579898, aosp/1302153, links em inglês)

  • Correção de um bug em que WorkManager tenta executar várias instâncias de um Worker 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 um Worker em primeiro plano é interrompido. (b/155579898, aosp/1302153, links em inglês)
  • Correção de um bug em que WorkManager tenta executar várias instâncias de um Worker vinculado a um serviço em primeiro plano. (b/156310133, aosp/1309853, links em inglês)
  • Disponibilizada a compatibilidade com a adição dinâmica de fábrica para delegar ao usar um DelegatingWorkerFactory. (b/156289105, aosp/1309745, links em inglês)
  • Alinhamento mais preciso das restrições de BATTERY_NOT_LOW em relação à plataforma. (aosp/1312583, link em inglês)

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, link em inglês).
  • Adição de uma nova regra de lint que garante que as implementações de ListenableWorker agora sejam public ao usar o WorkerFactory padrão (aosp/1291262, link em inglês).

Mudanças na API

  • As chamadas para setProgressAsync() depois da execução de um ListenableWorker sinalizarão um Exception por meio do ListenableFuture (aosp/1285494, link em inglês).
  • WorkQuery.Builder agora está marcado como final (aosp/1275037, link em inglês).
  • Os métodos de fábrica withStates, withTags e withUniqueWorkNames do WorkQuery.Builder foram renomeados como fromStates, fromTags e fromUniqueWorkNames, respectivamente (aosp/1280287, link em inglês).

Correções de bugs

  • SecurityExceptions 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 WorkRequests requerem Constraints.setRequiresCharging(...) e Constraints.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 WorkInfos usando um WorkQuery. Isso é útil quando os desenvolvedores querem procurar WorkInfos por meio de uma combinação de vários atributos. Para saber mais, consulte WorkQuery.Builder withStates(...), WorkQuery.Builder withTags(...) ou WorkQuery.Builder withUniqueWorkNames(...) (aosp/1253230, b/143847546, links em inglês).

  • As chamadas para setForegroundAsync() que não forem concluídas antes da conclusão de um ListenableWorker agora serão sinalizadas por meio de um IllegalStateException no ListenableFuture retornado (aosp/1262743, link em inglês).

Correções de bugs

  • Correção da regra de lint que verifica durações de intervalo inválidas para PeriodicWorkRequests (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 WorkManagers 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 monitora WorkRequests que podem ser executados no futuro, incluindo PeriodicWorkRequests. O escalonador de processos também não observa os limites de programação, mas ainda está restrito ao tamanho do Executor usado pelo WorkManager. Isso significa que o aplicativo agora pode executar muitos mais WorkRequests quando o app estiver em primeiro plano (aosp/1185778, link em inglês).

  • 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, link em inglês).
  • Novas regras de lint que obrigam:

    • Uso do foregroundServiceType correto ao usar APIs setForegroundAsync() (b/147873061, aosp/1215915, link em inglês).
    • Especificação de IDs JobScheduler usados por WorkManager ao usar APIs JobService diretamente (aosp/1223567, link em inglês).

Mudanças na API

  • Adição de ExistingWorkPolicy.APPEND_OR_REPLACE, que é semelhante a APPEND, mas substitui uma cadeia que cancelou ou falhou os pré-requisitos (b/134613984, aosp/1199640, links em inglês).

  • Capacidade de adicionar um RunnableScheduler personalizado para monitorar WorkRequests 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 em RxWorker depois de retornar um Single<Void> que é um tipo impossível. Adição de uma nova API setCompletableProgress(), que retorna um Completable; 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 Workers de execução longa depois de exceder a janela de execução de 10 minutos (aosp/1247484, b/150553353, links em inglês).
  • 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, links em inglês).
  • Correção de uma disputa em ConstraintControllers (aosp/1220100, link em inglês).
  • Melhoria no ciclo de vida em serviço de primeiro plano de gerenciamento para os Workers de longa duração (aosp/1226295, link em inglês).
  • 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 Notifications para Workers de longa duração executados quando um Service está ativo no primeiro plano (aosp/1218539, b/147249312, links em inglês).
  • WorkManager agora depende de androidx.sqlite:sqlite-framework:2.1.0 estável (aosp/1217729, link em inglês).
  • Inclusão de regras de lint para garantir que um foregroundServiceType seja especificado no AndroidManifest.xml ao usar foregroundServiceTypes em ForegroundInfo (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

Lançamento de androidx.work:work-*:2.3.0-rc01. A versão 2.3.0-rc01 contém essas confirmações (link em inglês).

Essa versão é idêntica a 2.3.0-beta02

Correções de bugs

  • O artefato work-testing agora define uma dependência api em work-runtime-ktx (aosp/1194410, link em inglês).

Versão 2.3.0-beta02

18 de dezembro de 2019

Lançamento de androidx.work:work-*:2.3.0-beta02. 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, link em inglês).
  • Adição de uma regra de lint que garante que o provedor de conteúdo androidx.work.impl.WorkManagerInitializer seja removido do AndroidManifest.xml ao usar a inicialização sob demanda (aosp/1167007, link em inglês).
  • Adição de um alerta de lint quando enqueue() é usado para PeriodicWorkRequest, em vez de enqueueUniquePeriodicWork() (aosp/1166032, link em inglês).

Mudanças na API

  • ForegroundInfo agora exige que você especifique o notificationId que será empregado ao usar ListenableWorker.setForegroundAsync(). Essa é uma alteração interruptiva. Ela permite que você execute vários Workers de execução longa em paralelo. WorkManager também gerencia melhor a duração das Notifications 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, link em inglês).
  • Correção de um bug em que uma lista vazia de WorkRequests fazia com que uma cadeia de WorkContinuation 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

Lançamento de androidx.work:work-*:2.3.0-beta01. 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 (link em inglês)

Versão 2.3.0-alpha03

23 de outubro de 2019

Lançamento de androidx.work:work-*:2.3.0-alpha03. A versão 2.3.0-alpha03 contém essas confirmações.

Novos recursos

  • Adição da API WorkManager.createCancelPendingIntent(), que facilita o cancelamento de WorkRequests sem precisar registrar outro componente no AndroidManifest.xml. Essa API facilita o cancelamento de WorkRequests a partir de Notifications. 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 para ForegroundInfo.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

Lançamento de androidx.work:work-*:2.3.0-alpha02. 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() (ou CoroutineWorker#setForeground() para Kotlin). (aosp/1133636, link em inglês)

Mudanças na API

  • A API containsKey em Data foi renomeada como hasKeyWithValueOfType. O método de extensão correspondente na biblioteca ktx também foi renomeado. (b/141916545, link em inglês)

Correções de bugs

  • As programações do WorkManager funcionam bem quando o número de WorkRequests em fila se aproximam aos limites de programação. (aosp/1105766, link em inglês)
  • O WorkManager só chama ListenableWorker#onStopped() se o trabalho ainda não tiver sido concluído. (b/140055777, link em inglês)
  • Agora, o WorkManager remove informações de andamento quando um worker é interrompido ou atinge seu estado terminal. (aosp/1114572, link em inglês)
  • Agora, Data tem uma representação toString() muito mais útil. (b/140945323, link em inglês)
  • Agora, Data tem um método equals() melhor. Ele também é compatível com deepEquals para tipos Array. (b/140922528, link em inglês)
  • 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

Lançamento de androidx.work:work-*:2.3.September 5, 20190-alpha01. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Novos recursos

  • ListenableWorkers agora podem definir o progresso por meio da API setProgressAsync(). Também foi adicionada uma API suspend-ing setProgress correspondente em CoroutineWorker e uma setProgress em RxWorker, que retorna um Single<Void>. Com essas novas APIs, os Workers podem transmitir informações de andamento por meio de WorkInfo, que tem uma API getProgress correspondente. (b/79481554, link em inglês)
  • Data tem uma API containsKey() que pode ser usada para validar que os dados de entrada para Worker têm chaves com o tipo esperado. (b/117136838, link em inglês)
  • Agora, Data pode ser serializado usando Data.toByteArray() e Data.fromByteArray(). Não há qualquer garantia de controle de versões com Data. 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 um Configuration.setInputMergerFactory. (b/133273159, link em inglês)

Mudanças na API

  • O WorkManager gerará uma instância de IllegalStateException se um WorkerFactory retornar uma instância de ListenableWorker que foi invocada anteriormente. (b/139554406, link em inglês)
  • Atualizações da documentação sobre o cancelamento ListenableFuture e o callback onStopped() em ListenableWorker. (b/138413671, link em inglês)

Correções de bugs

  • O escalonador de processos agora ignora WorkRequests com a restrição idle. Essas solicitações agora só são atendidas por JobScheduler quando o dispositivo está realmente idle. (aosp/1089779, link em inglês)
  • TestScheduler agora usa o Executor 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

Lançamento de androidx.work:work-*:2.2.0. 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

Lançamento de androidx.work:work-*:2.2.0-rc01. 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/1092374, link em inglês) (b/138238197, link em inglês).
  • Adicionada uma solução alternativa para NullPointerException ao usar APIs JobScheduler 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

Lançamento de androidx.work:work-*:2.2.0-beta02. 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

Lançamento de androidx.work:work-*:2.2.0-beta01. 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, link em inglês)

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 a build.gradle: kotlinOptions { jvmTarget = "1.8" }
  • Adicionada a inicialização sob demanda, que criará o WorkManager somente quando ele for referenciado b/127497100 (link em inglês). Para configurar o projeto para inicialização sob demanda:
    1. Desative o inicializador automático.
    2. Implemente Configuration.Provider no seu objeto Application personalizado.
    3. Mude todas as referências de WorkManager.getInstance() para WorkManager.getInstance(Context). Como parte dessa mudança, suspendemos o uso de WorkManager.getInstance(). É sempre mais seguro chamar a nova substituição WorkManager.getInstance(Context), mesmo que você não esteja inicializando sob demanda.
  • PeriodicWorkRequests agora são compatíveis com atrasos iniciais. Você pode usar o método setInitialDelay em PeriodicWorkRequest.Builder para definir um atraso inicial b/111404867 (link em inglês).
  • Adicionada a capacidade de delegar a um ou mais WorkerFactorys registrados usando DelegatingWorkerFactory b/131435993 (link em inglês).
  • Adicionada a capacidade de personalizar o Executor usado pelo WorkManager para todos os seus registros internos por meio de Configuration.Builder.setTaskExecutor.
  • Adicionada a capacidade de criar classes de unidades testáveis Worker e ListenableWorker usando TestWorkerBuilder e TestListenableWorkerBuilder no artefato work-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 (link em inglês).
  • Tipos de Data agora podem armazenar e recuperar bytes e matrizes de bytes. Isso NÃO muda o tamanho máximo dos objetos Data.
  • 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

Lançamento de androidx.work:work-*:2.1.0-rc01. 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 tarefas com JobScheduler enquanto um backup estava em andamento b/135858602 (link em inglês).

Versão 2.1.0-beta02

20 de junho de 2019

Lançamento de androidx.work:work-*:2.1.0-beta02. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Correções de bugs

  • Agora, TestListenableWorkerBuilder usa o método WorkerFactory correto ao criar instâncias de ListenableWorker. b/135275844 (link em inglês)
  • Correção de um bug que causava desvios nas janelas de execução para WorkRequests devido ao término do processo. b/135272196 (link em inglês).

Versão 2.1.0-beta01

13 de junho de 2019

Lançamento de androidx.work:work-*:2.1.0-beta01. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

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 na linha de execução 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 PeriodicWorkRequests.
  • 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

  • PeriodicWorkRequests agora são compatíveis com atrasos iniciais. Você pode usar o método setInitialDelay em PeriodicWorkRequest.Builder para definir um atraso inicial b/111404867 (link em inglês).

  • Adicionada a capacidade de delegar a um ou mais WorkerFactorys registrados usando DelegatingWorkerFactory b/131435993 (link em inglês).

  • Adicionada a capacidade de personalizar o Executor usado pelo WorkManager para todos os seus registros internos por meio de Configuration.Builder.setTaskExecutor.

  • Melhorada a documentação sobre WorkRequest.keepResultsForAtLeast (b/130638001, link em inglês), inicialização sob demanda e PeriodicWorkRequest.Builder (b/131711394, link em inglês).

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 (link em inglês). Para configurar o projeto para inicialização sob demanda:
    1. Desative o inicializador automático.
    2. Implemente Configuration.Provider no seu objeto Application personalizado.
    3. Mude todas as referências de WorkManager.getInstance() para WorkManager.getInstance(Context). Como parte dessa mudança, suspendemos o uso de WorkManager.getInstance(). É sempre mais seguro chamar a nova substituição WorkManager.getInstance(Context), mesmo que você não esteja inicializando sob demanda.
  • Adicionada a capacidade de criar classes de unidades testáveis Worker e ListenableWorker usando TestWorkerBuilder e TestListenableWorkerBuilder no artefato work-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 (link em inglês).
  • Tipos de Data agora podem armazenar e recuperar bytes e matrizes de bytes. Isso NÃO muda o tamanho máximo dos objetos Data.
  • O uso de CoroutineWorker.coroutineContext foi suspenso. Esse campo foi digitado incorretamente como um CoroutineDispatcher. 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() e RxWorker.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 link em inglês).
  • Correção de um StackOverflowError que processa longas cadeias de trabalho. b/129091233 (link em inglês).
  • Atualização da documentação de PeriodicWorkRequests, 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

Para ver mais informações sobre o uso de extensões Kotlin, consulte a documentação do Android KTX.
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 link em inglês).
  • Correção de um StackOverflowError que processa longas cadeias de trabalho. b/129091233 (link em inglês).

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

  • Workers são programados corretamente após uma falha no aplicativo b/124546316 (link em inglês).

  • Workers que geram uma Exception desmarcada agora são marcados corretamente como FAILED 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

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 (link em inglês)
  • Correção de uma NullPointerException em dispositivos com Android 5.1 (API de nível 22) ou anterior b/123835104 (link em inglês).

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 (link em inglês).
  • 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 (link em inglês).
  • 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 (link em inglês).
  • Correção de um caso em que o trabalho não respeitava corretamente o tempo de espera b/122881597 (link em inglês).
  • Correção de uma ConcurrentModificationException em dispositivos com Android 5.1 (API) ou versão anterior. Essa é uma continuação da correção em 1.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 (link em inglês).
  • Correção de uma ConcurrentModificationException em dispositivos com Android 5.1 (API de nível 22) ou anterior b/121345393 (link em inglês).
  • Correção da execução incorreta do trabalho quando Constraints não eram cumpridas em dispositivos com Android 5.1 (API de nível 22) ou anterior b/122578012 (link em inglês).
  • Otimizado o manuseio da conclusão do trabalho para ganhar agilidade em alguns casos extremos. b/122358129 (link em inglês).
  • Adicionada uma mudança para solucionar possíveis disputas entre várias instâncias de LiveData usadas pelo WorkManager.
  • Mudança para usar a dependência Room1.1.1 em vez de 1.1.1-rc01. Essas versões são idênticas b/122578011 (link em inglês).

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 do ListenableWorker. Isso evita conflitos de refatoração com a classe Result 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 do ListenableWorker.

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, apresenta RxWorker. Esse é um ListenableWorker que espera um Single<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 com Result. Result agora é uma "classe fechada" com três implementações concretas, que você pode conseguir por meio de Result.success() (ou Result.success(Data)), Result.failure() (ou Result.failure(Data)) e Result.retry(). Seus ListenableFutures agora resultam em Result em vez de Payload. Workers não têm métodos getter e setter para a saída Data. Essa é uma alteração interruptiva.
  • Adicionadas variantes Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) e Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) para oferecer melhor compatibilidade com URIs de conteúdo de acionamento lento. b/119919774 (link em inglês).
  • Adicionada variante WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Este método requer a API 26.
  • Adicionados métodos de extensão Kotlin Operation.await() e ListenableFuture.await().
  • A função Operation.getException() foi renomeada como Operation.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 e OneTimeWorkRequest para simplificar a API. Para corrigir qualquer problema de compilação, você pode agrupar varargs já existentes com Arrays.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étodos combine 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 de observeForever são rastreados pelo WorkManager. Essa é uma retrocompatibilidade de uma correção de 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á um WorkInfo com o CANCELLED State durante ListenableWorker.onStopped().
  • Trate null Results como falhas em ListenableWorker. b/120362353 (link em inglês)
  • Correção especulativa de Shield Tablets com a API 24, que às vezes gerava uma IllegalArgumentException. b/119484416 (link em inglês)

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 com Result. Result agora é uma "classe fechada" com três implementações concretas, que você pode conseguir por meio de Result.success() (ou Result.success(Data)), Result.failure() (ou Result.failure(Data)) e Result.retry(). Seus ListenableFutures agora resultam em Result em vez de Payload. Workers não têm métodos getter e setter para a saída Data.
  • Adicionados métodos de extensão Kotlin Operation.await() e ListenableFuture.await().
  • Operation.getException() foi renomeado como Operation.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 e OneTimeWorkRequest para simplificar a API. Para corrigir qualquer problema de compilação, você pode agrupar varargs já existentes com Arrays.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étodos combine 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 novo CoroutineWorker.
  • WorkStatus foi renomeado como WorkInfo. Todas as variantes correspondentes do método getStatus foram renomeadas para as variantes getWorkInfo correspondentes. Essa é uma alteração interruptiva.
  • ListenableWorker.onStopped() não aceita mais ter um argumento booleano indicando se WorkRequest foi cancelado. WorkManager não faz mais essa distinção. Essa é uma alteração interruptiva.
  • O pacote androidx.work.test foi renomeado como androidx.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() e WorkerParameters.getTriggeredContentAuthorities() antes retornavam matrizes. Agora, esses métodos retornam coleções. Essa é uma alteração interruptiva.
  • ListenableWorker.onStartWork() foi renomeado como ListenableWorker.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() e Configuration.getMinJobSchedulerID() são renomeados como Configuration.getMinJobSchedulerId() e Configuration.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 enfileirar OneTimeWorkRequests exclusivas sem precisar criar um WorkContinuation.
  • Todas as variantes dos métodos enqueue e cancel em WorkManager agora retornam um novo tipo Operation. Essa é uma alteração interruptiva.
  • Todas as variantes de enqueue não aceitam mais varargs para WorkRequests. Essa é uma alteração interruptiva. Use Coleções em vez disso. Você pode usar Arrays.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 o WorkManager mais de uma vez por processo agora resultará em uma IllegalStateException. Essa é uma alteração interruptiva.

Correções de bugs

  • WorkRequest.Builders no artefato work-runtime-ktx agora usam ListenableWorkers. Corrige b/117666259 (link em inglês)
  • Verifique se o próximo tempo de execução para PeriodicWork será no futuro. Corrige b/117666259 (link em inglês)
  • Remover possível E/S do disco ao usar o 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 como WorkInfo. Todas as variantes correspondentes do método getStatus foram renomeadas para as variantes getWorkInfo correspondentes.
  • ListenableWorker.onStopped() não aceita mais ter um argumento booleano indicando se WorkRequest foi cancelado. WorkManager não faz mais essa distinção.
  • O pacote androidx.work.test foi renomeado como androidx.work.testing.
  • Os setters em Constraints não fazem mais parte da API pública.
  • WorkerParameters.getTriggeredContentUris() e WorkerParameters.getTriggeredContentAuthorities() antes retornavam matrizes. Agora, esses métodos retornam Coleções.
  • ListenableWorker.onStartWork() foi renomeado como ListenableWorker.startWork().
  • O construtor do WorkStatus não faz mais parte da API pública.
  • Configuration.getMaxJobSchedulerID() e Configuration.getMinJobSchedulerID() são renomeados como Configuration.getMinJobSchedulerId() e Configuration.getMaxJobSchedulerId(), respectivamente.
  • Todas as variantes dos métodos enqueue e cancel em WorkManager agora retornam um novo tipo Operation.
  • Todas as variantes de enqueue não aceitam mais varargs para WorkRequests.
  • A tentativa de initialize WorkManager mais de uma vez por processo agora resultará em uma IllegalStateException.

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 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ão Worker. Essa é uma alteração interruptiva da API.
  • NonBlockingWorker foi renomeado para ListenableWorker, 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, atualize ListenableFuture corretamente. As implementações de referência de ListenableFutures são fornecidas no pacote Futures em alpha02 (veja abaixo a seção WorkManager).
    • Worker estende ListenableWorker e ainda funciona como antes, com um método Result doWork() abstrato.
    • Alguns métodos e membros foram embaralhados de Worker para ListenableWorker.
    • Em breve, forneceremos implementações de referência para ListenableWorkers que usam corrotinas Kotlin (assim que as versões estáveis forem lançadas) e RxJava2.
  • A interface WorkerFactory e a implementação concreta DefaultWorkerFactory foram mescladas em uma classe abstrata chamada WorkerFactory. 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ância WorkerFactory criada pelo usuário. Essa é uma alteração interruptiva.
  • Removidos WorkManager.synchronous() e WorkContinuation.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 ListenableFutures podem ser usados para trabalho e observação de forma assíncrona. Por exemplo, WorkManager.enqueue() retornava void e agora retorna um ListenableFuture<Void>. Você pode chamar ListenableFuture.addListener(Runnable, Executor) ou ListenableFuture.get() para executar o código depois que a operação é concluída.
    • Observe que esses ListenableFutures 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 do 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 contrato Futures.
    • Para manter a paridade com os métodos getStatus* síncronos, fornecemos variantes ListenableFuture e renomeamos os existentes que retornaram LiveData para ter explicitamente "LiveData" como parte do nome (por exemplo, getStatusesByIdLiveData(UUID)). Essa é uma alteração interruptiva da API.

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 excluindo exclude 'META-INF/proguard/androidx-annotations.pro' do arquivo do Gradle.
  • Configurações do ProGuard foram adicionadas para manter o novo construtor Worker. b/116296569 (link em inglês)
  • Correção de possível NullPointerException em uma disputa em que o trabalho era REPLACE. b/116253486 e b/116677275 (links em inglês)
  • WorkContinuation.combine() agora aceita uma ou mais WorkContinuations em vez de dois ou mais. b/117266752 (link em inglês)

Alterações interruptivas da API

  • Removidos todos os métodos e classes deprecated anteriores, principalmente o construtor padrão Worker.
  • A interface WorkerFactory e a implementação concreta DefaultWorkerFactory foram mescladas em uma classe abstrata chamada WorkerFactory.
  • Removidos WorkManager.synchronous() e WorkContinuation.synchronous().
  • Métodos WorkManager.getStatus*() agora retornam ListenableFutures. WorkManager.getStatus*LiveData() retorna LiveDatas.

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

  • Adicionada outra correção necessária para o erro "100 jobs". b/115560696
  • Adicionadas algumas correções para erros de restrição de chave externa devido a disputas. b/114705286
  • Chamadas ConstraintTrackingWorker.onStopped(boolean) foram delegadas para o Worker subjacente. b/114125093 (link em inglês)
  • 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 uma WorkerFactory como parte da WorkManager.Configuration. A fábrica de substituição é DefaultWorkerFactory, que corresponde ao comportamento das versões anteriores do WorkManager.
    • Os construtores padrão para Worker e NonBlockingWorker agora estão marcados como obsoletos. Use o novo construtor (Worker(Context, WorkerParameters)) e chame super(Context, WorkerParameters). Futuras versões do WorkManager removerão o construtor padrão.
  • 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 de NonBlockingWorker.
  • Adicionada capacidade de acionar o trabalho cronometrado no TestDriver por meio de TestDriver.setInitialDelayMet(UUID) e TestDriver.setPeriodDelayMet(UUID). b/113360060 (link em inglês)

Alterações interruptivas

  • O uso dos construtores padrão Worker e NonBlockingWorker 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 do 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 do WorkManager com reconhecimento de inicialização direta. b/112665532 (link em inglês)
  • Correção de um problema em que o trabalho repetido não era executado. b/112604021
  • Corrigido 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.
  • Reduzido valor máximo de Configuration.setMaxSchedulerLimit(int) para 50, para compensar a latência na conclusão do processamento do JobScheduler. b/112817355 (link em inglês)

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 (link em inglês)
  • Correção de uma ConcurrentModificationException em ConstraintTracker. b/112272753 (link em inglês)
  • Mudadas as anotações de tipo de retorno de Data.getBooleanArray(String) e Data.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) e Data.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 um workDataOf(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 (link em inglês)
  • Correção de uma disputa ao rastrear restrições que causava falhas no WorkManager. googlecodelabs/android-workmanager/issues/56 (em inglês).
  • Criar WorkRequests exclusivas ao usar WorkRequest.Builder#build(). b/111408337 (link em inglês)
  • Ative o uso de RescheduleReceiver somente quando houver WorkRequests que precisem dele. b/111765853 (link em inglês)

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á uma IllegalStateException. Essa é uma alteração interruptiva da API.
  • Adicionada uma nova API, Configuration.Builder.setMinimumLoggingLevel(int), que pode controlar o detalhamento do WorkManager. Por padrão, o WorkManager registra Log.INFO e acima.
  • Mudança da assinatura de Data.getString(), para que ela não aceite mais um valor padrão (é implicitamente null). Essa é uma alteração interruptiva da API.
  • Marcados alguns métodos necessários apenas para uso interno como @hide. Isso inclui o construtor Constraints, Data.toByteArray() e Data.fromByteArray(byte[]). Essa é uma alteração interruptiva da API.

Correções de bugs

  • O 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 PeriodicWorkRequests ao usar o JobScheduler. b/110798652 (link em inglês)
  • Correção de um problema com PeriodicWorkRequests 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 BroadcastReceivers 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 o WorkRequest especificado. b/111238024 (link em inglês)

Alterações interruptivas

  • 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 (é implicitamente null).
  • Marcados alguns métodos necessários apenas para uso interno como @hide. Isso inclui o construtor Constraints, Data.toByteArray() e Data.fromByteArray(byte[]).

Versão 1.0.0-alpha04

26 de junho de 2018

Correções de bugs

  • PeriodicWorkRequests agora são reprogramadas corretamente ao usar a implementação baseada em AlarmManager.
  • Correção de um possível ANR ao reprogramar todos os workers após um fechamento forçado ou uma reinicialização. b/110507716
  • Adicionadas anotações de anulação a várias APIs do 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 do 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 (link em inglês)

  • 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 (links em inglês)

  • Correção de uma falha ao reposicionar um WorkRequest na fila. b/109572353 (link em inglês).

  • Correção de avisos do compilador Kotlin ao usar a dependência work-runtime-ktx.

  • O WorkManager agora usa Room versão 1.1.1-rc1.

Mudanças na API

  • Adicionada getStatusesSync(), a versão síncrona de WorkContinuation.getStatuses().
  • Worker consegue distinguir entre o cancelamento iniciado pelo usuário e a interrupção temporária solicitada pelo SO. Worker.isStopped() retorna true quando qualquer tipo de interrupção é solicitado. Worker.isCancelled() retorna true quando o trabalho foi explicitamente cancelado. b/79632247 (link em inglês)
  • Adicionada 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 para JobScheduler ou AlarmManager. Isso ajuda a evitar que o WorkManager assuma todos os slots JobScheduler disponíveis.
  • Adicionado Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) que ajuda a definir um intervalo de IDs de jobs do JobScheduler seguros para o WorkManager. b/79996760 (link em inglês)
  • Worker.getRunAttemptCount() retorna a contagem de execução atual para um determinado Worker. b/79716516 (link em inglês)
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) permite enfileirar PeriodicWorkRequests exclusivos. b/79600647 (link em inglês)
  • WorkManager.cancelAllWork() cancela todos os Workers. As bibliotecas que dependem de WorkManager podem consultar quando esse método foi chamado pela última vez usando WorkManager.getLastCancelAllTimeMillis() para limpeza adicional do estado interno.
  • Adicionado WorkManager.pruneWork() para remover os jobs concluídos do banco de dados interno. b/79950952, b/109710758 (link em inglês)

Mudanças de comportamento

  • Adicionada uma tag implícita para todos os WorkRequests, que é o nome da classe totalmente qualificado do Worker. Isso permite remover WorkRequests sem tags ou quando id não está disponível. b/109572351 (link em inglês)

Alterações interruptivas

  • Worker.WorkerResult foi renomeado como Worker.Result.
  • Worker.onStopped agora tem um parâmetro extra isCancelled definido como true quando Worker tiver sido explicitamente cancelado.

Versão 1.0.0-alpha02

24 de maio de 2018

Correções de bugs

  • Correção de um NullPointerException em State.isFinished(). b/79550068 (link em inglês)
  • Correção de um problema que fazia com que Workers fossem reprogramados em Application.onCreate(). b/79660657 (link em inglês)
  • 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 Workers 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 floats em Data. b/79443878 (link em inglês)
  • Data.Builder.putAll() agora retorna uma instância de Builder. b/79699162 (link em inglês)
  • Mais Javadoc e correções na documentação. b/79691663

Mudanças na API

  • Workers podem reagir à própria interrupção. Worker.isStopped() pode ser usado para verificar se um Worker foi interrompido. Worker.onStopped() pode ser usado para executar operações de limpeza leves.
  • A API Worker.getTags() retorna um Set de tags associadas ao Worker.
  • Adicionadas sobrecargas de javax.time.Durationpara APIs que usam uma combinação de duração e TimeUnits. Isso é protegido por @RequiresApi(26).
  • As extensões do WorkManager foram movidas do pacote androidx.work.ktx para o pacote androix.work. O uso das extensões antigas foi suspenso, e elas serão removidas em uma versão futura.
  • Configuration.withExecutor() foi suspenso. Use Configuration.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.