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 Versão candidata a lançamento Versão Beta Versão Alfa
24 de janeiro de 2024 2.9.0 (link em inglês) - - 2.10.0-alpha01

Declarar dependências

Para adicionar uma dependência ao WorkManager, é preciso adicionar o repositório Maven do Google ao seu projeto.

Adicione as dependências dos artefatos necessários no arquivo build.gradle para seu app ou módulo:

Groovy

dependencies {
    def work_version = "2.9.0"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Kotlin

dependencies {
    val work_version = "2.9.0"

    // (Java only)
    implementation("androidx.work:work-runtime:$work_version")

    // Kotlin + coroutines
    implementation("androidx.work:work-runtime-ktx:$work_version")

    // optional - RxJava2 support
    implementation("androidx.work:work-rxjava2:$work_version")

    // optional - GCMNetworkManager support
    implementation("androidx.work:work-gcm:$work_version")

    // optional - Test helpers
    androidTestImplementation("androidx.work:work-testing:$work_version")

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Para ver mais informações sobre o uso de extensões Kotlin, consulte a documentação do Android KTX.

Para ver mais informações sobre dependências, consulte Adicionar dependências de build.

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.

Criar novo problema

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

Versão 2.10

Versão 2.10.0-alpha01

24 de janeiro de 2024

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

Novos recursos

  • Os desenvolvedores podem especificar NetworkRequest como uma restrição para um worker usando o método Constraints.setRequiredNetworkRequest. Isso permite um controle mais granular sobre em qual rede esse worker deve ser executado.

Mudanças na API

  • Adição da capacidade de especificar NetworkRequest como a restrição (Id98a1, b/280634452).

Versão 2.9

Versão 2.9.0

29 de novembro de 2023

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

Mudanças importantes desde a versão 2.8.0

  • Observabilidade por Flow-s. Em vez de LiveData, o progresso do worker agora pode ser observado pelo fluxo via WorkManager.getWorkInfosFlow e métodos semelhantes
  • Agora, WorkManager oferece uma dica sobre o motivo de um worker ter sido interrompido anteriormente. Ele pode ser consultado em um worker usando o método getStopReason() ou de WorkInfo com getStopReason().
  • Programação precisa de workers periódicos via setNextScheduleTimeOverride. Isso permite o cálculo dinâmico da próxima programação de trabalho periódica, que pode ser usada para implementar recursos avançados, como tempos de atualização adaptáveis, comportamento personalizado de nova tentativa ou executar um worker de feed de notícias antes que o usuário acorde todas as manhãs, sem deslocamentos. O ExistingPeriodicWorkPolicy.UPDATE precisa ser usado com essas técnicas para evitar o cancelamento de um worker em execução durante a programação do próximo.
  • Testes do WorkManager com produção de linhas de execução correspondentes. ExecutorsMode.PRESERVE_EXECUTORS pode ser usado em initializeTestWorkManager para preservar os executores definidos em Configuration e usar a linha de execução principal real.
  • As APIs de corrotinas, como CoroutineWorker, foram movidas do artefato extra work-runtime-ktx para o artefato principal work-runtime. O work-runtime-ktx agora está vazio.

Mudanças na API

  • stopReason foi adicionado a WorkInfo. Ele disponibiliza stopReason após a execução do worker. Isso pode ser útil na geração de relatórios de stopReason de maneira utilizável, porque uma vez que um worker é interrompido, o próprio app pode ser encerrado muito rapidamente. (I21386).
  • Permissão que Clock seja definido pela configuração e usado para gerar o sequenciamento de execução dos testes de worker. (Ic586e).
  • O método getStopReason() foi adicionado a ListenableWorker, o que dá uma dica por que o worker foi interrompido (I07060).
  • WorkManagerTestInitHelper#closeWorkDatabase() foi adicionado para evitar o aviso do Closeguard sobre vazamento de recursos (Ia8d49).
  • Agora, o construtor do WorkInfo é público, o que pode ser útil em testes. (Ia00b6, b/209145335).
  • work-runtime-ktx agora está vazio, CoroutineWorker e outros utilitários específicos do Kotlin agora estão disponíveis no artefato principal de execução de trabalho (I71a9a).
  • Adição do método setNextScheduleTimeOverride, que permite a configuração precisa de cronogramas de trabalho periódicos (I3b4da).
  • getNextScheduleTimeMillis foi adicionado para receber as informações do tempo de execução programado em WorkInfo (I797e4).
  • As informações de atraso inicial e periodicidade são adicionadas a WorkInfo. (I52f2f).
  • Adição do método de observação de workers por fluxos usando os métodos getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a).
  • As anotações @RequiresApi(...) ausentes foram adicionadas aos construtores e às propriedades do Constraints Agora, elas estão alinhadas com as anotações correspondentes nos setters no Constraints.Builder que existiam nas primeiras versões de WorkManager. (I6d7d2).
  • WorkManager agora tem um limite separado para workers de URI de conteúdo a fim de fornecer slots garantidos em JobScheduler e evitar atualizações de conteúdo ausentes sob alta carga. O limite pode ser configurado via Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f).
  • As restrições foram adicionadas ao WorkInfo (I162c0).

Versão 2.9.0-rc01

18 de outubro de 2023

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

  • Nenhuma mudança desde a última versão Beta

Versão 2.9.0-beta01

6 de setembro de 2023

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

Mudanças na API

Versão 2.9.0-alpha02

26 de julho de 2023

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

Novos recursos

  • Agora, WorkManager oferece uma dica sobre o motivo de um worker ter sido interrompido anteriormente. Ele pode ser consultado em um worker usando o método getStopReason() ou de WorkInfo com getStopReason().

Mudanças na API

  • stopReason foi adicionado a WorkInfo. Ele disponibiliza stopReason após a execução do worker. Isso pode ser útil na geração de relatórios stopReason de maneira utilizável, porque uma vez que um worker é interrompido, o próprio app pode ser encerrado rapidamente. (I21386).
  • Permissão que o relógio seja definido por meio da configuração e usado para gerar o sequenciamento de execução dos testes de worker. (Ic586e).
  • O método getStopReason() foi adicionado a ListenableWorker, o que dá uma dica por que o worker foi interrompido (I07060).
  • WorkManagerTestInitHelper#closeWorkDatabase() foi adicionado para evitar o aviso do Closeguard sobre vazamento de recursos (Ia8d49).

Correções de bugs

  • Adição da capacidade de ignorar overrideNextScheduleTime usando TestDriver e correção de problemas de testabilidade (Ic2905).

Versão 2.9.0-alpha01

7 de junho de 2023

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

Novos recursos

  • Observabilidade por Flow-s. Em vez de LiveData, o progresso do worker agora pode ser observado pelo fluxo via WorkManager.getWorkInfosFlow e métodos semelhantes
  • Programação precisa de workers periódicos via setNextScheduleTimeOverride. Isso permite o cálculo dinâmico da próxima programação de trabalho periódica, que pode ser usada para implementar recursos avançados, como tempos de atualização adaptáveis, comportamento personalizado de nova tentativa ou executar um worker de feed de notícias antes que o usuário acorde todas as manhãs, sem deslocamentos. O ExistingPeriodicWorkPolicy.UPDATE precisa ser usado com essas técnicas para evitar o cancelamento de um worker em execução ao programar o próximo.
  • Testes de WorkManager com linhas de execução correspondentes à produção. ExecutorsMode.PRESERVE_EXECUTORS pode ser usado para preservar os executores definidos em Configuration e usar a linha de execução principal real.
  • As APIs de corrotinas, como CoroutineWorker, foram movidas do artefato adicional work-runtime-ktx para o artefato principal work-runtime. work-runtime-ktx está vazio agora.

Mudanças na API

  • O construtor do WorkInfo é público agora, o que pode ser útil em testes (Ia00b6, b/209145335).
  • work-runtime-ktx agora está vazio, CoroutineWorker e outros utilitários específicos do Kotlin agora estão disponíveis no artefato work-runtime principal (I71a9a).
  • Adição do método setNextScheduleTimeOverride, que permite a configuração precisa de cronogramas de trabalho periódicos (I3b4da).
  • getEarliestRunTimeMillis foi renomeado como getNextScheduleTimeMillis (I2bd7a).
  • As informações do próximo horário de execução programado foram adicionadas a WorkInfo (I797e4).
  • As informações de atraso inicial e periodicidade são adicionadas a WorkInfo. (I52f2f).
  • Adição do método de observação de workers por fluxos usando os métodos getWorkInfosByTagFlow, getWorkInfoByIdFlow, getWorkInfosForUniqueWorkFlow, getWorkInfosFlow (If122a).
  • Adição de anotações @RequiresApi(...) ausentes aos construtores e propriedades de Constraints Agora, elas estão alinhadas com as anotações correspondentes nos setters no Constraints.Builder que existiam nas primeiras versões de WorkManager. (I6d7d2).
  • WorkManager agora tem um limite separado para workers de URI de conteúdo a fim de fornecer slots garantidos em JobScheduler e evitar atualizações de conteúdo ausentes sob alta carga. O limite pode ser configurado via Configuration.Builder.setContentUriTriggerWorkersLimit. (Ic128f).
  • As restrições foram adicionadas ao WorkInfo (I162c0).

Versão 2.8

Versão 2.8.1

22 de março de 2023

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

Correções de bugs

  • Foi corrigido um ANR em RescheduleReceiver, que antes não processava corretamente duas transmissões simultâneas (b/236906724).

Versão 2.8.0

8 de fevereiro de 2023

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

Mudanças importantes desde a versão 2.7.0

Novos recursos

Mudanças na API

  • WorkManager.updateWork foi adicionado para atualizar o trabalho que preserva o tempo original de enfileiramento e encadeamento (I9a248, b/219446409).
  • A ExistingPeriodicWorkPolicy.UPDATE foi adicionada. Essa política permite atualizar um trabalho periódico pelo nome. Ela é parecida com o valor REPLACE atual, mas é menos invasiva, porque não cancela um worker em execução e preserva o tempo de enfileiramento. O atraso e período iniciais são calculados usando o tempo original da fila em vez do tempo de atualização. O uso de REPLACE foi descontinuado para diminuir a confusão entre REPLACE e UPDATE, que têm nomes muito parecidos. Se você ainda quiser manter a semântica anterior de REPLACE, use o novo CANCEL_AND_REENQUEUE, que é idêntico a REPLACE (I985ed, b/219446409).
  • Foi adicionada a capacidade de interceptar exceções de programação que fornecem Consumer<Throwable> via setSchedulingExceptionHandler.
  • Foi adicionada a capacidade de fornecer Consumer<Throwable> via setInitializationExceptionHandler para determinar se houve problemas ao tentar inicializar o WorkManager.
  • Os auxiliares inline para OneTimeWorkRequest e PeriodicWorkRequest foram movidos de androidx.work:work-runtime-ktx para androidx.work:work-runtime (I0010f, b/209145335).
  • Os métodos auxiliares WorkQuery.fromIds, WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames e WorkQuery.fromTags foram adicionados para criar a WorkQuery diretamente (b/199919736) (If48f2, b/199919736).
  • O método getForegroundInfo foi adicionado ao Worker (Ic1ead).
  • O RxWorker para RxJava 2 e RxJava 3 agora tem o método setForeground que retorna um elemento Completable. Ele pode ser usado no lugar de setForegroundInfoAsync, que retorna um artefato ListenableFuture
  • O RxWorker para RxJava 2 e RxJava 3 tem um getForegroundInfo que retorna um elemento Single. Ele pode ser usado no lugar de getForegroundInfoAsync, que retorna um ListenableFuture (b/203851459).
  • Agora, as restrições podem ser construídas diretamente em vez de pelo Constraints.Builder, o que é conveniente para usuários do Kotlin (Idc390, b/137568653).
  • Foi adicionada a capacidade de verificar se o WorkManager foi inicializado. Além disso, uma nova API getConfiguration() foi adicionada para que os desenvolvedores de bibliotecas recebam a configuração com que o WorkManager foi inicializado (I6eff3, b/212300336).

Correções de bugs

  • Corrigido um problema com o excesso de atividades do programador que impedia os workers de serem executados imediatamente durante o carregamento (I9686b, b/248111307).
  • Adicionamos a @RequiresPermission a APIs que exigem a permissão POST_NOTIFICATIONS no SDK 33 e versões mais recentes (Ie542e, b/238790278).
  • Propagação de cancelamentos no CoroutineScope para o ListenableFuture ao usar suspendCancellableCoroutine.

Versão 2.8.0-rc01

7 de dezembro de 2022

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

Novos recursos

  • Não há novos recursos nesta versão. Isso se refere principalmente a um aumento de versão.

Versão 2.8.0-beta02

9 de novembro de 2022

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

Correções de bugs

  • Correção do método equals em WorkInfo, que antes não levava em consideração as novas informações de geração (4977cc).

Versão 2.8.0-beta01

5 de outubro de 2022

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

Correções de bugs

  • Corrigido um problema com o excesso de atividades do programador que impedia os workers de serem executados imediatamente durante o carregamento (I9686b, b/248111307).

Versão 2.8.0-alpha04

7 de setembro de 2022

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

Mudanças na API

  • Foram adicionados WorkerInfo.getGeneration() e WorkerParameters.getGeneration(), que retornam a geração de um worker. Um worker tem várias gerações quando é atualizado por WorkManager.updateWork ou WorkManager.enqueueUniquePeriodicWork usando ExistingPeriodicWorkPolicy.UPDATE. Se o worker estiver em execução no momento, esse método vai poder retornar uma geração mais recente após uma atualização (I665c5, b/219446409) (I128a9, b/219446409).
  • Foi adicionado InitializationExceptionHandler, um gerenciador de exceções que pode ser usado para determinar se houve problemas ao tentar inicializar WorkManager (I061de).

Versão 2.8.0-alpha03

10 de agosto de 2022

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

Novos recursos

  • Foi adicionada a capacidade de atualizar WorkRequests de forma não intrusiva, preservando o tempo original da fila, do encadeamento, entre outros. Consulte WorkManager.updateWork e ExistingPeriodicWorkPolicy.UPDATE para saber mais detalhes.

Mudanças na API

  • WorkManager.updateWork foi adicionado para atualizar o trabalho que preserva o tempo original de enfileiramento e encadeamento (I9a248, b/219446409).
  • A ExistingPeriodicWorkPolicy.UPDATE foi adicionada. Esta política permite atualizar um trabalho periódico pelo nome. Ela é parecida com o método atual REPLACE, mas é menos invasiva, porque não cancela um worker em execução e preserva o tempo de enfileiramento. O atraso e o período inicial são calculados usando o tempo original da fila em vez do tempo de atualização. O uso de REPLACE foi descontinuado para diminuir a confusão entre nomes muito parecidos com REPLACE e UPDATE. Se você ainda quiser manter a semântica anterior de REPLACE, use o novo CANCEL_AND_REENQUEUE, que é idêntico a REPLACE (I985ed, b/219446409).
  • Foi adicionada a capacidade de interceptar exceções de programação definindo um SchedulingExceptionHandler (I033eb).
  • Os auxiliares inline para OneTimeWorkRequest e PeriodicWorkRequest foram movidos de androidx.work:work-runtime-ktx para androidx.work:work-runtime (I0010f, b/209145335).

Correções de bugs

  • A @RequiresPermission foi adicionada às APIs que exigem a concessão da permissão POST_NOTIFICATIONS no SDK 33 e versões mais recentes (Ie542e, b/238790278).

Versão 2.8.0-alpha02

6 de abril de 2022

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

Mudanças na API

  • Agora, as restrições podem ser construídas diretamente em vez de pelo builder, o que é conveniente para usuários do Kotlin (Idc390, b/137568653).
  • Foi adicionada a capacidade de verificar se o WorkManager foi inicializado. Além disso, uma nova API getConfiguration() foi adicionada para que os desenvolvedores de bibliotecas recebam a configuração com que o WorkManager foi inicializado (I6eff3, b/212300336).

Versão 2.8.0-alpha01

12 de janeiro de 2022

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

Mudanças na API

  • Os métodos auxiliares WorkQuery.fromStates, WorkQuery.fromUniqueWorkNames e WorkQuery.fromTags foram adicionados para criar a WorkQuery diretamente (If48f2, b/199919736).
  • Adição de métodos experimentais BuildCompat para SDKs futuros (Iafd82, b/207528937).
  • Adição de getForegroundInfo à Worker (Ic1ead).
  • Adição dos métodos auxiliares WorkQuery.fromIds para criar a WorkQuery diretamente com os IDs (Ie5bdf, b/199919736).
  • O RxWorker agora tem o método setForeground retornando um elemento Completable. Ele pode ser usado no lugar de setForegroundInfoAsync, que retorna um artefato ListenableFuture (I85156).
  • O RxWorker para RxJava 2 agora tem o método getForegroundInfo retornando um elemento Single. Ele pode ser usado no lugar de getForegroundInfoAsync, que retorna um artefato ListenableFuture (I21c91, b/203851459).
  • O RxWorker para RxJava 3 agora tem um método getForegroundInfo retornando um elemento Single. Ele pode ser usado no lugar de getForegroundInfoAsync, que retorna um artefato ListenableFuture (I1ca8a).
  • O RxWorker agora tem o método setForeground retornando um elemento Completable. Ele pode ser usado no lugar de setForegroundInfoAsync, que retorna um artefato ListenableFuture (I992a3, b/203851459).

Correções de bugs

  • Propagação de cancelamentos no CoroutineScope para o ListenableFuture ao usar suspendCancellableCoroutine (I77e63).

Versão 2.7

Versão 2.7.1

17 de novembro de 2021

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

Correções de bugs

  • Os cancelamentos no CoroutineScope são propagados para o ListenableFuture ao usar o método suspendCancellableCoroutine (I77e63).
  • Uma exceção é gerada imediatamente quando solicitações de trabalho atrasadas são marcadas como aceleradas (bef1762).

Versão 2.7.0

13 de outubro de 2021

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

Mudanças importantes desde a versão 2.6.0

  • O WorkManager introduz uma nova API WorkRequest.Builder.setExpedited(...) para ajudar com as restrições de serviço em primeiro plano no Android 12.

  • Ao usar setExpedited(...), o WorkManager delega para jobs priorizados no JobScheduler começando pelo Android 12, mas mantém a compatibilidade com versões anteriores do Android delegando a um serviço em primeiro plano.

Versão 2.7.0-rc01

29 de setembro de 2021

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

Esta versão é idêntica à androidx.work:work-*:2.7.0-beta01.

Versão 2.7.0-beta01

1º de setembro de 2021

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

Novos recursos

  • Redução da contenção de SQLite em vários processos ao inicializar o WorkManager.

Mudanças na API

  • Remoção de APIs @ExperimentalExpeditedWork, já que as APIs de plataforma subjacentes para o Android 12 (S) são estáveis (aosp/1792806).

Correções de bugs

  • Fornecimento de uma mensagem de erro melhor para workers acelerados que não implementam getForegroundInfoAsync() (aosp/1809376).

Versão 2.7.0-alpha05

21 de julho de 2021

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

Essa versão também contém correções de bugs do WorkManager 2.6.0-beta02.

Versão 2.7.0-alpha04

2 de junho de 2021

Lançamento de androidx.work:work-*:2.7.0-alpha04.

Essa versão também contém as mudanças da 2.6.0-beta01.

Mudanças na API

  • A ListenableWorker.setForegroundAsync() não está mais descontinuada.
  • Recomendamos usar a API WorkRequest.Builder.setExpedited(...) quando possível. Para oferecer melhor suporte em situações em que o app não está sujeito a restrições de serviço em primeiro plano, os desenvolvedores podem usar a API ListenableWorker.setForegroundAsync().
  • Se a ListenableWorker.setForegroundAsync() for chamada, quando o app estiver sujeito a restrições de serviço em primeiro plano, uma ForegroundServiceStartNotAllowedException será gerada.

Correções de bugs

  • Quando os jobs acelerados forem reprogramados, eles não serão mais acelerados. Eles se tornarão jobs normais.

Versão 2.7.0-alpha03

21 de abril de 2021

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

Novos recursos

Mudanças na API

Versão 2.7.0-alpha02

10 de Março de 2021

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

Correções de bugs

  • A mutabilidade da PendingIntent agora é explícita para corrigir uma falha quando usada no Android 12 (b/180884673).

Versão 2.7.0-alpha01

18 de fevereiro de 2021

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

Novos recursos

  • O WorkManager introduz uma nova API WorkRequest.Builder.setExpedited(...) para considerar as restrições do serviço em primeiro plano no Android 12.

    Os aplicativos não podem mais iniciar um serviço em primeiro plano quando estão em segundo plano. Portanto, para oferecer melhor suporte em um trabalho de longa duração vinculado anteriormente ao ciclo de vida de um serviço em primeiro plano, os aplicativos podem marcar WorkRequests como acelerados.

    Esta API é uma substituição para as APIs setForegroundAsync(...) / setForeground(...) que foram descontinuadas.

    Ao usar setExpedited(...), o WorkManager delega para jobs priorizados no JobScheduler a partir do Android 12, mas mantém a compatibilidade com versões anteriores do Android delegando aos serviços em primeiro plano.

Mudanças na API

  • Adição de suporte para WorkRequests aceleradas.

Versão 2.6.0

Versão 2.6.0

1º de setembro de 2021

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

Mudanças importantes desde a versão 2.5.0

  • O WorkManager agora usa androidx.startup para inicializar o WorkManager. Se você usava tools:node="remove", o ContentProvider que era usado para inicializar o ciclo de vida do processo anteriormente, é necessário fazer o seguinte.

    <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    
    <!-- If you want to disable android.startup completely. -->
     <provider
                android:name="androidx.startup.InitializationProvider"
                android:authorities="${applicationId}.androidx-startup"
                tools:node="remove" />
    
  • Adição de suporte para workers que podem ser executados em qualquer processo. (Iaf200).

  • Adição de um RemoteCoroutineWorker, uma implementação de RemoteListenableWorker que pode ser vinculada a um processo remoto (I30578).

Versão 2.6.0-rc01

4 de agosto de 2021

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

Esta versão é idêntica à androidx.work:work-*:2.6.0-beta02.

Versão 2.6.0-beta02

21 de julho de 2021

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

Correções de bugs

  • O RemoteWorkManager agora se desvincula corretamente do RemoteWorkManagerService, possibilitando que o RemoteWorkManagerService seja limpo sem qualquer erro (aosp/1730694).
  • O RemoteListenableWorker agora se desvincula corretamente do RemoteWorkerService, possibilitando que o RemoteWorkerService seja limpo sem qualquer errro (aosp/1743817).
  • O ForceStopRunnable agora só é executado no processo principal do app. Essa é uma otimização e evita a contenção de recursos para apps que usam vários processos (aosp/1749180, aosp/1761729).

Versão 2.6.0-beta01

2 de junho de 2021

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

Essa versão contém algumas pequenas melhorias na documentação. Ela é praticamente idêntica à 2.6.0-alpha02.

Versão 2.6.0-alpha02

21 de abril de 2021

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

Novos recursos

  • Adiciona suporte para workers que podem ser executados em qualquer processo (Iaf200).

  • Adição de um RemoteCoroutineWorker, que é uma implementação de RemoteListenableWorker que pode ser vinculada a um processo remoto (I30578).

Mudanças na API

  • Adição de suporte para restrição de rede TEMPORARILY_UNMETERED (I08d5e).
  • Suporte de worker de vários processos para setProgressAsync() (Ib6d08).
  • O WorkManagerInitializer agora é público para que possa ser usado como dependência por outros androidx.startup.Initializers (I5ab11).

Versão 2.6.0-alpha01

24 de março de 2021

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

Novos recursos

  • WorkManager agora usa androidx.startup para inicializar o WorkManager. Anteriormente, isso era feito pelo androidx.work.impl.WorkManagerInitializer (aosp/1608813).

    Se você usava tools:node="remove", o ContentProvider que era usado para inicializar o ciclo de vida do processo anteriormente, será necessário fazer o seguinte.

     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities=\"${applicationId}.androidx-startup"
        android:exported="false"
        tools:node=\"merge">
        <!-- If you are using androidx.startup to initialize other components -->
        <meta-data
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:value="androidx.startup"
            tools:node="remove" />
     </provider>
    

    (ou)

     <!-- If you want to disable android.startup completely. -->
     <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        tools:node="remove">
     </provider>
    

Mudanças na API

  • Adição de uma API Result.getOutputData() que retorna o outputData do ListenableWorker (Ie51e3).

Correções de bugs

  • Adicione uma solução alternativa para um bug de OEM que causa uma SecurityException ao usar APIs AlarmManager (aosp/1587518).

Versão 2.5.0

Versão 2.5.0

27 de janeiro de 2021

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

Principais mudanças desde a versão 2.4.0

  • Um novo artefato :work:work-multiprocess para apps que usam vários processos. Isso gera ganhos de desempenho ao unificar a programação de solicitações de trabalho em um único processo.
    • Definição de uma dependência em implementation "androidx.work:work-multiprocess:2.5.0" para usar work-multiprocess
    • Designação de um processo principal usando Configuration.Builder.setDefaultProcessName(String).
    • Ao usar work-multiprocess, também é recomendável usar o RemoteWorkManager para gerenciar suas WorkRequests. O RemoteWorkManager sempre acessa o processo designado. O programador em processo também é executado no processo designado.
  • Às vezes, ActivityManager não consegue instanciar JobService para iniciar um job. Isso faz com que o job implícito seja silenciosamente descartado devido a um bug da plataforma. O WorkManager agora garante que haja jobs de apoio para cada WorkRequest quando um Application estiver sendo inicializado ao reconciliar os jobs. Isso melhora muito a confiabilidade da execução de jobs (b/172475041, aosp/1489577).
  • O WorkManager limita o crescimento do banco de dados reduzindo a duração do buffer para o qual as WorkRequests são rastreadas após a conclusão de uma WorkRequest. Antes, a duração era de 7 dias. Ela foi reduzida para 1 dia + a duração de keepResultsForAtLeast (aosp/1419708).
  • O TestListenableWorkerBuilder agora oferece suporte à classe reificada que estende ListenableWorker para facilitar os testes (aosp/1443299, b/169787349).
  • O WorkManager Inspector agora está disponível ao usar o Android Studio Arctic Fox.

Versão 2.5.0-rc01

13 de janeiro de 2021

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

Correções de bugs

  • Corrigido um bug em que o getWorkInfosLiveData não era invalidado corretamente após a atualização de entidades ao usar a API baseada em WorkQuery (aosp/1540566, b/173769028).
  • Corrigido um bug em que as transações do banco de dados não eram marcadas como bem-sucedidas em alguns casos raros. Isso causa problemas em alguns dispositivos Motorola (aosp/1535368, b/175944460).
  • Correção de um bug para ignorar NoSuchElementExceptions ao tentar se desvincular de um processo inativo (aosp/1530589).
  • Melhoria em ConstraintTrackingWorker para interromper um ListenableWorker apenas se ele ainda não tiver sido interrompido (aosp/1496844, b/172946965).
  • Atualização das bibliotecas androidx.work para Java 8 (Ibd2f2).

Versão 2.5.0-beta02

2 de dezembro de 2020

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

Correções de bugs

  • Corrigido um bug no androidx.work:work-multiprocess em que o WorkManager bloqueou acidentalmente a linha de execução de chamada ao tentar se vincular ao processo designado (aosp/1475538).
  • Correção de um bug em que as PeriodicWorkRequests 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

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

Novos recursos

  • O WorkManager limita automaticamente o número de WorkRequests que podem ser selecionadas pelo programador de processos. As solicitações ainda são executadas na ordem FIFO (aosp/1455228).
  • O WorkManager tenta a recuperação quando o armazenamento de dados do aplicativo está em um estado inadequado (aosp/1463103).

Correções de bugs

  • Quando ListenableWorkers forem interrompidos, marque-os imediatamente como ENQUEUED para que possam ser reprogramados (aosp/1455618, b/170273988).

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 de androidx.work:work-*:2.5.0-alpha02. A versão 2.5.0-alpha02 contém estas confirmações.

Novos recursos

  • Adição de uma API ao WorkQuery para usar ids para consultar WorkInfos (aosp/1412372, b/157335295).
  • O WorkManager oferece mais suporte a apps que usam vários processos com um novo artefato (androidx.work:work-multiprocess:*). Esse novo artefato ajuda a resolver alguns problemas que os apps grandes encontram, incluindo:
    • Normalmente, o WorkManager precisa ser inicializado em todos os processos do app. Isso não é ideal, porque causa um aumento de contenção no SQLite, o que gera outros problemas. O WorkManager agora tem novas APIs que podem ser usadas para designar um processo principal do app usando o Configuration#setDefaultProcessName(processName). 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

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

Novos recursos

  • Mudanças nas APIs internas permitem oferecer ferramentas melhores com o WorkManager daqui em diante. Fique de olho nas próximas atualizações.

Correções de bugs

  • Processamento de 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 de androidx.work:work-*:2.4.0. A versão 2.4.0 contém estas confirmações.

Principais mudanças desde a versão 2.3.0

  • O escalonador de processos de 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 oferece suporte ao RxJava 3. Para usar o RxJava 3, inclua a seguinte dependência: implementation "androidx.work:work-rxjava3:2.4.0" (aosp/1277904).
  • Adição da capacidade de consultar WorkInfos usando uma WorkQuery. Isso é útil quando os desenvolvedores querem procurar WorkInfos com 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 não cumpriu os pré-requisitos (b/134613984, aosp/1199640).

  • Capacidade de adicionar um RunnableScheduler personalizado para monitorar WorkRequests que precisam ser executados no futuro. Isso é usado pelo programador de processos (aosp/1203944).

  • Foi adicionado suporte à adição dinâmica de fábricas para delegação ao usar um DelegatingWorkerFactory (b/156289105, aosp/1309745).

  • Alinhamento mais preciso das restrições de BATTERY_NOT_LOW em relação à plataforma (aosp/1312583).

  • O programador em processo agora usa APIs melhores para determinar o nome do processo. Isso é útil para oferecer melhor compatibilidade a apps que usam vários processos (aosp/1324732).

  • Novas regras de lint que obrigam:

    • Uso do foregroundServiceType correto ao usar APIs setForegroundAsync() (b/147873061, aosp/1215915).
    • A especificação de IDs do JobScheduler que o WorkManager precisa usar com as APIs do JobService diretamente (aosp/1223567).
    • Foi adicionada uma nova regra de lint que garante que as implementações de ListenableWorker agora sejam public ao usar a WorkerFactory padrão (aosp/1291262).
  • As chamadas para setForegroundAsync() que não são concluídas antes da conclusão de um ListenableWorker agora são sinalizadas usando um IllegalStateException no ListenableFuture retornado (aosp/1262743).

  • Corrigido um bug em que o ForegroundService não é interrompido depois que um Worker em primeiro plano é interrompido (b/155579898, aosp/1302153).

  • 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

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

Correções de bugs

  • O programador em processo agora usa APIs melhores para determinar o nome do processo. Isso é útil para oferecer melhor compatibilidade a apps que usam vários processos (aosp/1324732).

Versão 2.4.0-beta01

20 de maio de 2020

Lançamento de androidx.work:work-gcm:2.4.0-beta01, androidx.work:work-runtime:2.4.0-beta01, androidx.work:work-runtime-ktx:2.4.0-beta01, androidx.work:work-rxjava2:2.4.0-beta01 e androidx.work:work-testing:2.4.0-beta01. A versão 2.4.0-beta01 contém estas confirmações.

Correções de bugs

  • Corrigido um bug em que o ForegroundService não é interrompido depois que um Worker em primeiro plano é interrompido (b/155579898, aosp/1302153).
  • Corrigido 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).
  • Foi adicionado suporte à adição dinâmica de fábricas para delegação ao usar um DelegatingWorkerFactory (b/156289105, aosp/1309745).
  • Alinhamento mais preciso das restrições de BATTERY_NOT_LOW em relação à plataforma (aosp/1312583).

Versão 2.4.0-alpha03

29 de abril de 2020

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

Novos recursos

  • O WorkManager agora oferece suporte ao RxJava 3. Para usar o RxJava 3, inclua a seguinte dependência: implementation "androidx.work:work-rxjava3:2.4.0-alpha03" (aosp/1277904).
  • Foi adicionada uma nova regra de lint que garante que as implementações de ListenableWorker agora sejam public ao usar a WorkerFactory padrão (aosp/1291262).

Mudanças na API

  • As chamadas para setProgressAsync() depois da execução de um ListenableWorker vão sinalizar uma Exception usando um ListenableFuture (aosp/1285494).
  • WorkQuery.Builder agora está marcado como final (aosp/1275037).
  • 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 estas confirmações.

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 consultar WorkInfos usando uma WorkQuery. Isso é útil quando os desenvolvedores querem procurar WorkInfos com 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).

  • As chamadas para setForegroundAsync() que não são concluídas antes da conclusão de um ListenableWorker agora são sinalizadas usando um IllegalStateException no ListenableFuture retornado (aosp/1262743).

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

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

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).

  • 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 APIs setForegroundAsync() (b/147873061, aosp/1215915).
    • 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 não cumpriu os pré-requisitos (b/134613984, aosp/1199640)

  • Capacidade de adicionar um RunnableScheduler personalizado para monitorar WorkRequests que precisam ser executados no futuro. Isso é usado pelo programador de processos (aosp/1203944, link em inglês).

Correções de bugs

  • setProgress() foi descontinuado no RxWorker porque retornava 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).

Versão 2.3.4

Versão 2.3.4

18 de março de 2020

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

Correções de bugs

  • Corrigido um bug que causava a execução de várias instâncias de Workers 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

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

Correções de bugs

  • Correção de um bug em que, quando um Worker era interrompido, ele não era reprogramado corretamente (b/150325687, aosp/1246571).

Versão 2.3.2

Versão 2.3.2

19 de fevereiro de 2020

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

Correções de bugs

  • Correção de um problema em que o WorkManager excede o limite de 100 jobs no JobScheduler em casos raros (aosp/1226859, b/149092520).
  • Correção de uma disputa em ConstraintControllers (aosp/1220100).
  • Melhoria no ciclo de vida em serviço de primeiro plano de gerenciamento para os Workers de longa duração (aosp/1226295).
  • Melhoria no gerenciamento do cancelamento de notificações para Workers de longa duração após o cancelamento do Worker (aosp/1228346, link em inglês).

Versão 2.3.1

Versão 2.3.1

5 de fevereiro de 2020

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

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).
  • WorkManager agora depende de androidx.sqlite:sqlite-framework:2.1.0 estável (aosp/1217729).
  • 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).

Versão 2.3.0

Versão 2.3.0

22 de janeiro de 2020

androidx.work:work-*:2.3.0 é lançado sem mudanças desde 2.3.0-rc01. A versão 2.3.0 contém estas confirmações.

Mudanças importantes desde a versão 2.2.0

  • Foi adicionado suporte para execuções longas ou trabalhos importantes usando o método ListenableWorker#setForegroundAsync().
  • Suporte ao Worker Progress com ListenableWorker#setProgressAsync().
  • O WorkManager agora traz mais regras de lint como parte da biblioteca, o que ajuda a detectar bugs mais cedo.

Versão 2.3.0-rc01

8 de janeiro de 2020

androidx.work:work-*:2.3.0-rc01 é lançado. A versão 2.3.0-rc01 contém estas confirmações.

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

Correções de bugs

  • O artefato work-testing agora define uma dependê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 estas confirmações.

Novos recursos

  • Adição de uma mensagem de erro melhor para exceções SQLite não recuperáveis (aosp/1185777).
  • Foi adicionada uma regra de lint que garante que o provedor de conteúdo androidx.work.impl.WorkManagerInitializer seja removido do AndroidManifest.xml ao usar a inicialização sob demanda (aosp/1167007).
  • 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).

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 WorkRequests fazia com que uma cadeia de WorkContinuation incorreta fosse criada (b/142835274, aosp/1157051).

Mudanças na dependência

  • O WorkManager agora usa a Room 2.2.2.

Versão 2.3.0-beta01

20 de novembro de 2019

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

Novos recursos

  • Foi adicionada uma nova regra de lint que evita erros de desenvolvedor devido à implementação incorreta de androidx.work.Configuration.Provider ao usar a inicialização sob demanda (aosp/1164559).

Versão 2.3.0-alpha03

23 de outubro de 2019

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

Novos recursos

  • Foi adicionada a 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 como ForegroundInfo.getForegroundServiceType() para ser mais consistente com as APIs de plataforma subjacentes (b/142729893, aosp/1143316).

Correções de bugs

  • Correção de um bug causado por uma chamada desnecessária para setTransactionSuccessful() fora da transação. Isso acontece em migrações raras. (b/142580433, aosp/1141737, links em inglês)

Versão 2.3.0-alpha02

9 de outubro de 2019

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

Novos recursos

  • O WorkManager agora oferece suporte a execuções longas ou trabalhos importantes que precisam ser mantidos ativos pelo SO. Para ver mais informações, consulte ListenableWorker#setForegroundAsync() (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).

Correções de bugs

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

Lançamento de androidx.work:work-*:2.3.September 5, 20190-alpha01. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • ListenableWorkers agora podem definir o progresso usando a API setProgressAsync(). Também foi adicionada a API suspend 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 usando um objeto WorkInfo, que tem uma API getProgress correspondente (b/79481554).
  • 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.
  • Foi adicionada a capacidade de especificar um InputMergerFactory usando um Configuration.setInputMergerFactory (b/133273159, link em inglês).

Mudanças na API

  • O WorkManager gera uma instância de IllegalStateException se um WorkerFactory retorna uma instância de ListenableWorker que foi invocada anteriormente (b/139554406).
  • 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).
  • 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 neste link (em inglês).

Essa versão é idêntica a androidx.work:work-*:2.2.0-rc01.

Alterações importantes feitas na versão 2.2.0 em comparação à 2.1.0

androidx.work:work-gcm:2.2.0 é um novo artefato Maven compatível com o uso de GCMNetworkManager como programador quando o Google Play Services está disponível para APIs de nível igual ou superior a 22. Essa é uma dependência opcional que ajuda no processamento em segundo plano mais confiável e com melhor desempenho em versões de API mais antigas. Se seu app usa o Google Play Services, adicione essa dependência ao arquivo do Gradle para ser automaticamente compatível com o GCMNetworkManager. Se o Google Play Services não estiver disponível, o WorkManager continuará retornando ao AlarmManager em dispositivos mais antigos.

Versão 2.2.0-rc01

30 de julho de 2019

androidx.work:work-*:2.2.0-rc01 é lançado. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Correções de bugs

  • Correção de um bug na implementação do AlarmManager que fazia com que o Service fosse encerrado prematuramente e, em casos raros, resultava em uma RejectedExecutionException (aosp/1092374) (b/138238197).
  • Adicionada uma solução alternativa para NullPointerException ao usar APIs JobScheduler em alguns dispositivos (aosp/1091020) (b/138364061), (b/138441699).

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 neste link.

Novos recursos

  • androidx.work:work-gcm:2.2.0-beta01 é um novo artefato Maven compatível com o uso de GCMNetworkManager como programador quando o Google Play Services está disponível para APIs de nível igual ou superior a 22. Essa é uma dependência opcional que ajuda no processamento em segundo plano mais confiável e com melhor desempenho em versões de API mais antigas. Se seu app usa o Google Play Services, adicione essa dependência ao arquivo do Gradle para ser automaticamente compatível com o GCMNetworkManager. Se o Google Play Services não estiver disponível, o WorkManager continuará retornando ao AlarmManager em dispositivos mais antigos.

Correções de bugs

  • Correção para IllegalArgumentException ao rastrear o estado da rede em tablets Nvidia Shield K1 (aosp/1010188).

Versão 2.1.0

Versão 2.1.0

11 de julho de 2019

Lançamento de androidx.work:work-*:2.1.0. Essa versão é idêntica a androidx.work:work-*:2.1.0-rc01.

Mudanças importantes desde a versão 2.0.1

  • work-runtime-ktx agora exige Java 8. Se você encontrar algum problema, adicione o seguinte a build.gradle: kotlinOptions { jvmTarget = "1.8" }
  • Foi adicionada a inicialização sob demanda, que cria o WorkManager somente quando ele é referenciado. b/127497100 Para configurar o projeto para inicialização sob demanda:
    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 de 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).
  • Adicionada a capacidade de delegar a um ou mais WorkerFactorys registrados usando DelegatingWorkerFactory b/131435993 (link em inglês).
  • Adicionada a capacidade de usar Configuration.Builder.setTaskExecutor para personalizar o Executor usado pelo WorkManager para todos os registros internos.
  • Foi adicionada a capacidade de criar classes de unidade Worker e ListenableWorker testáveis 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.
  • A contagem de tentativas de execução foi adicionada a 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 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

  • Corrigido um bug que fazia o aplicativo falhar ao executar jobs com JobScheduler enquanto um backup estava em andamento (b/135858602).

Versão 2.1.0-beta02

20 de junho de 2019

Lançamento de androidx.work:work-*:2.1.0-beta02. As confirmações incluídas nessa versão podem ser encontradas neste link.

Correções de bugs

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

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 neste link.

Correções de bugs

  • O WorkManager agora depende de Room 2.1.0, o que corrige alguns problemas do banco de dados.
  • Remoção de algumas E/S do disco de inicialização no thread principal.
  • Correção de um possível impasse no rastreamento de restrições (b/134361006).
  • Cancelamento antecipado de tarefas inválidas atribuídas ao WorkManager (b/134058261).
  • Adição de algumas chamadas defensivas às APIs do JobScheduler para dispositivos com comportamento inadequado.

Versão 2.1.0-alpha03

5 de junho de 2019

Lançamento de androidx.work:*:2.1.0-alpha03.

Correções de bugs

  • Documentação aprimorada para 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 no AlarmManager com relação aos ciclos de vida do serviço que antes causavam falhas raras. (b/133313734).

Versão 2.1.0-alpha02

16 de maio de 2019

Lançamento do WorkManager 2.1.0.0-alpha02. Essa versão contém várias APIs novas.

Mudanças na API

  • 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).

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

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

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

Versão 2.1.0-alpha01

24 de abril de 2019

Lançamento do WorkManager 2.1.0-alpha01. Essa versão contém várias APIs novas. A partir dessa versão, haverá novos recursos sem backport com a versão 1.x. Recomendamos que você mude para 2.x.

Mudanças na API

  • Foi adicionada a inicialização sob demanda, que cria o WorkManager somente quando ele é referenciado. b/127497100 Para configurar o projeto para inicialização sob demanda:
    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 de WorkManager.getInstance(Context), mesmo que você não esteja inicializando sob demanda.
  • Foi adicionada a capacidade de criar classes de unidade Worker e ListenableWorker testáveis 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.
  • A contagem de tentativas de execução foi adicionada a 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 objetos Data.
  • O uso de CoroutineWorker.coroutineContext foi descontinuado. Esse campo foi digitado incorretamente como CoroutineDispatcher. Ele não é mais necessário, já que é possível ir para o corrotinaContext desejado 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).
  • Corrigida uma falha de caso extremo com o rastreamento de restrições não sendo limpo nas APIs anteriores ao JobScheduler (b/129226383).
  • Correção de um StackOverflowError que processa longas cadeias de trabalho (b/129091233).
  • A documentação de PeriodicWorkRequests foi atualizada, indicando que o horário flexível não tem suporte na API de nível 23.
  • Correção de alguns links corrompidos na documentação do Kotlin.

Versão 2.0.0

Versão 2.0.0

20 de março de 2019

Lançamento do WorkManager 2.0.0. Esta versão é idêntica à 2.0.0-rc01 e é a versão AndroidX do 1.0.0 estável com dependências do AndroidX. Recomendamos usar essa versão como destino em vez das versões 1.x anteriores. Todo o desenvolvimento ativo é destinado à 2.x, e a 1.x recebe apenas correções de bugs essenciais por um tempo limitado.

Versão 2.0.0-rc01

7 de março de 2019

Lançamento do WorkManager 2.0.0-rc01. Essa versão é idêntica à 1.0.0 estável, mas tem dependências do AndroidX. Quando essa versão chegar à 2.0.0 estável, você deverá incluí-la, e as versões anteriores 1.x receberão apenas algumas correções de bugs essenciais. Todo o desenvolvimento ativo será destinado à 2.x.

Dependências anteriores ao AndroidX

Para ver mais informações sobre o uso de extensões Kotlin, consulte a documentação do Android KTX.
Documentos de referência: Java

Groovy

dependencies {
    def work_version = "1.0.1"

    // (Java only)
    implementation "android.arch.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "android.arch.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "android.arch.work:work-rxjava2:$work_version"
    // optional - Test helpers
    androidTestImplementation "android.arch.work:work-testing:$work_version"
}

Kotlin

dependencies {
    val work_version = "1.0.1"

    // (Java only)
    implementation("android.arch.work:work-runtime:$work_version")

    // Kotlin + coroutines
    implementation("android.arch.work:work-runtime-ktx:$work_version")

    // optional - RxJava2 support
    implementation("android.arch.work:work-rxjava2:$work_version")

    // optional - Test helpers
    androidTestImplementation("android.arch.work:work-testing:$work_version")
}

Versão 1.0.1

Versão 1.0.1

9 de abril de 2019

Lançamento do WorkManager 1.0.1. Essa versão é idêntica à 1.0.1-rc01.

É altamente recomendável que os usuários atualizem para o WorkManager 2.x, uma vez que haverá cada vez menos atualizações para as ramificação do 1.x daqui em diante. Além disso, APIs novas não serão lançadas para a biblioteca 1.x.

Versão 1.0.1-rc01

2 de abril de 2019

Lançamento do WorkManager 1.0.1-rc01. Essa versão contém algumas correções de bugs.

Correções de bugs

  • Os testes Robolectric agora funcionam corretamente com o WorkManager (b/122553577).
  • Corrigida uma falha de caso extremo com o rastreamento de restrições não sendo limpo nas APIs anteriores ao JobScheduler (b/129226383).
  • Correção de um StackOverflowError que processa longas cadeias de trabalho (b/129091233).

Versão 1.0.0

Versão 1.0.0

5 de março de 2019

Essa é a versão estável 1.0.0 do WorkManager. Essa versão do WorkManager é idêntica à 1.0.0-rc02.

Versão 1.0.0-rc02

21 de fevereiro de 2019

Esse é o segundo candidato a lançamento para a versão estável 1.0.0 do WorkManager. Essa versão contém duas correções de bugs.

Correções de bugs

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

  • 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

  • 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 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).
  • Correção de uma ConcurrentModificationException em dispositivos com Android 5.1 (API de nível 22) ou anterior (b/121345393).
  • Correção da execução incorreta do trabalho quando Restrições não eram cumpridas em dispositivos com Android 5.1 (API de nível 22) ou anterior (b/122578012).
  • Otimizado o manuseio da conclusão do trabalho para ganhar agilidade em alguns casos extremos (b/122358129).
  • Foi adicionada uma mudança para solucionar possíveis disputas entre várias instâncias de LiveData usadas pela WorkManager.
  • Mudança para usar a dependência Room1.1.1 em vez de 1.1.1-rc01. Essas versões são idênticas ((b/122578011).

Versão 1.0.0-beta01

19 de dezembro de 2018

Essa versão não tem mudanças de API. Futuramente, espera-se que o WorkManager continue com a API estável até a próxima versão, a não ser que ocorra um problema crítico. Essa versão contém algumas correções de bugs.

Correções de bugs

  • Os filhos cancelados anteriormente do trabalho pai concluído não serão mais executados. b/120811767
  • Inicialização correta de classes de geração de registros (exibidas principalmente durante testes).

Versão 1.0.0-alpha13

12 de dezembro de 2018

Essa versão contém uma pequena mudança na API que será útil para alguns usuários do Kotlin.

Mudanças na API

  • androidx.work.Result foi movido para ser uma classe interna de 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 de 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>.
  • O suporte ao Firebase JobDispatcher foi removido devido à descontinuação de uso iminente. Isso significa que o artefato work-firebase não vai ser mais atualizado quando passarmos para a versão Beta. Pretendemos adicionar uma alternativa no futuro.
  • Junção de Payload 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.
  • Foram adicionados Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit), Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) e variantes para oferecer melhor suporte a URIs de conteúdo de acionamento lento (b/119919774).
  • Adição da variante WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Este método requer a API 26.
  • Adicionados métodos de extensão Kotlin Operation.await() 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.
  • O LiveData que é observado com observeForever é rastreado pela WorkManager. Essa é uma retrocompatibilidade de uma correção da biblioteca Room b/74477406 (link em inglês)
  • Data.Builder.build() agora gera uma exceção quando o objeto serializado excede ao tamanho máximo. Antes, isso só acontecia em um encadeamento em segundo plano quando não era possível gerenciar isso corretamente.
  • Maior diferenciação entre o trabalho parado e o cancelado. getWorkInfoById() retornará um WorkInfo com o CANCELLED State durante ListenableWorker.onStopped().
  • Trate null Results como falhas em ListenableWorker (b/120362353).
  • Correção especulativa para Shield Tablets com a API 24, que às vezes gerava uma IllegalArgumentException (b/119484416).

Alterações interruptivas da API

  • O suporte ao Firebase JobDispatcher foi removido devido à descontinuação de uso iminente. Isso significa que o artefato work-firebase não vai ser mais atualizado quando passarmos para a versão Beta. Pretendemos adicionar uma alternativa no futuro.
  • Junção de Payload 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.
  • Os 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 WorkManager mais de uma vez por processo agora resulta 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.
  • Verifique se o próximo tempo de execução para PeriodicWork será no futuro. Corrige b/118204399.
  • Remover possível E/S do disco ao usar a WorkManager na inicialização do app. Corrige b/117796731.
  • Corrigir uma disputa em WorkConstraintsTracker. Corrige android-workmanager/issues/56

Alterações interruptivas da API

  • WorkStatus foi renomeado 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 resulta 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 mudanças importantes na API nessa versão. Consulte a seção Mudanças importantes da API abaixo.

Prevemos que a WorkManager estará entrando nas fases finais do período Alfa. Esperamos ter uma API estável em versão Beta. Por isso, pedimos que envie seu feedback sobre nosso rastreador de problemas.

Mudanças na API

  • Removidos todos os métodos e classes deprecated anteriores, principalmente o construtor padrã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 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 contrato Futures.
    • Para manter a paridade com os métodos getStatus* síncronos, fornecemos variantes ListenableFuture e renomeamos os já 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).
  • Correção de possível NullPointerException em uma disputa em que o trabalho era REPLACE (b/116253486 e b/116677275).
  • WorkContinuation.combine() agora aceita um ou mais WorkContinuations 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ã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:

Groovy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

Correções de bugs

  • Adição de outra correção necessária para o erro "100 jobs" (b/115560696).
  • Foram adicionadas algumas correções para erros de restrição de chave externa devido a disputas (b/114705286).
  • Chamadas ConstraintTrackingWorker.onStopped(boolean) foram delegadas para o Worker subjacente (b/114125093).
  • Imposição do atraso mínimo de retirada correto para o Firebase JobDispatcher (b/113304626).
  • Melhoradas as garantias de encadeamento internas para a biblioteca.
  • Corrigido um possível problema com a deduplicação de LiveData internamente.

Mudanças na API

  • Agora você pode criar suas instâncias Worker no momento da execução especificando uma WorkerFactory como parte da WorkManager.Configuration. A fábrica de substituição é DefaultWorkerFactory, que corresponde ao comportamento das versões anteriores da 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 da WorkManager vão remover 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 vai oferecer suporte com o eventual envio de NonBlockingWorker.
  • Foi adicionada a capacidade de acionar o trabalho cronometrado no TestDriver usando TestDriver.setInitialDelayMet(UUID) e TestDriver.setPeriodDelayMet(UUID) (b/113360060).

Mudanças importantes

  • 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 da WorkManager foram explicitamente identificados como sem reconhecimento de inicialização direta para que não sejam acionados nessa fase. No futuro, forneceremos uma versão da WorkManager com reconhecimento de inicialização direta (b/112665532).
  • Correção de um problema em que o trabalho repetido não era executado (b/112604021).
  • Correção de trabalho periódico fixo não executado repetidamente (relacionado ao problema acima). b/112859683
  • Políticas de retirada respeitadas quando o processo do app já está em execução.
  • Correção das mensagens de exceção em Data para indicar que o limite é 10 KB.
  • Redução do valor máximo de Configuration.setMaxSchedulerLimit(int) para 50, a fim de compensar a latência na conclusão do processamento do JobScheduler (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 em ConstraintTracker (b/112272753).
  • Mudadas as anotações de tipo de retorno de Data.getBooleanArray(String) e Data.getIntArray(String) para @Nullable em vez de @NonNull (b/112275229).

Mudanças na API

  • Worker agora estende uma nova classe, NonBlockingWorker. Isso não afeta nenhum uso atual. No futuro, NonBlockingWorker vai se tornar uma entidade com suporte total a soluções de linha de execução personalizadas.
  • Mudadas as anotações de tipo de retorno de Data.getBooleanArray(String) e Data.getIntArray(String) para @Nullable em vez de @NonNull (b/112275229).
  • 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 já existentes.

Versão 1.0.0-alpha06

1º de agosto de 2018

Correções de bugs

  • Impedir um bloqueio de banco de dados ao programar o trabalho (b/111801342).
  • Corrigido um bug que fazia com que o PeriodicWork não fosse executado na programação durante o modo Soneca (b/111469837).
  • Corrigida uma disputa ao rastrear restrições que causava falhas no WorkManager (googlecodelabs/android-workmanager/issues/56).
  • Criadas WorkRequests exclusivas ao usar WorkRequest.Builder#build() (b/111408337).
  • Permissão do uso de RescheduleReceiver somente quando houver WorkRequests que precisem dele (b/111765853).

Versão 1.0.0-alpha05

24 de julho de 2018

Mudanças na API

  • O WorkManager.getInstance() agora é anotado com @NonNull em vez de @Nullable. Agora, se o singleton não é inicializado corretamente manualmente, o método gera uma IllegalStateException. Essa é uma alteração interruptiva da API.
  • Foi adicionada uma nova API, Configuration.Builder.setMinimumLoggingLevel(int), que pode controlar o detalhamento da WorkManager. Por padrão, a WorkManager 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

  • 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 PeriodicWorkRequests ao usar o JobScheduler (b/110798652).
  • 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).

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 (é 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.
  • Corrigido um possível ANR ao reprogramar todos os workers após um fechamento forçado ou uma reinicialização (b/110507716).
  • Adição de anotações de anulação a várias APIs da WorkManager (b/110344065).
  • Registro de exceções não identificadas que ocorrem durante a execução do Worker (b/109900862).
  • Permissão de migrações de banco de dados destrutivas caso você decida reverter para uma versão mais antiga da WorkManager (b/74633270).
  • Correção de uma falha de migração ao criar tags implícitas duplicadas. Esse é um problema muito raro que ocorria apenas se você utilizasse o mesmo formato de tag implícito.

Versão 1.0.0-alpha03

19 de junho de 2018

Correções de bugs

  • Correção de uma disputa na implementação baseada no AlarmManager (b/80346526).

  • Correção de jobs duplicados ao usar o JobScheduler após a reinicialização do dispositivo.

  • Jobs com acionadores de URI de conteúdo agora persistem entre reinicializações (b/80234744).

  • Atualizações de documentação (b/109827628, b/109758949, b/80230748).

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

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

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

Mudanças na API

  • Adição de 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).
  • Foi adicionado suporte a JobParameters#getNetwork() na API de nível 28. Ele é exposto por Worker.getNetwork().
  • Adicionado Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) para que você possa impor quantos jobs podem ser enviados para JobScheduler ou AlarmManager. Isso ajuda a evitar que o WorkManager assuma todos os slots JobScheduler disponíveis.
  • Adição de Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) que ajuda a definir um intervalo de IDs de jobs do JobScheduler seguros para o WorkManager (b/79996760).
  • Worker.getRunAttemptCount() retorna a contagem de execução atual para um determinado Worker (b/79716516).
  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) permite enfileirar PeriodicWorkRequests exclusivos (b/79600647).
  • 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.
  • 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 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).

Mudanças importantes

  • 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).
  • Correção de um problema que fazia com que Workers fossem reprogramados em Application.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 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 localidades que não falam inglês (b/80065360).
  • Suporte adicionado para floats em Data (b/79443878).
  • Data.Builder.putAll() agora retorna uma instância de Builder (b/79699162).
  • 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 androidx.work. O uso das extensões antigas foi descontinuado, e elas vão ser removidas em uma versão futura.
  • O uso de Configuration.withExecutor() foi descontinuado. 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.