WorkManager — o que é, API e agendamento de tarefas

Autor: IT Sectr Publicado: 2026-03-27 Tempo de leitura: 8 min

WorkManager é uma biblioteca Android Jetpack projetada para executar tarefas adiadas e em segundo plano com execução garantida. Ao contrário de Service ou JobScheduler, o WorkManager gerencia o ciclo de vida da tarefa: reinicia em caso de falha, adapta-se à versão do Android e leva em conta as restrições do dispositivo. De acordo com Android Developers, 2026, o WorkManager é a solução preferida para a maioria das operações em segundo plano no desenvolvimento moderno de Android.

Pontos-chave

  • WorkManager é uma biblioteca Jetpack para tarefas em segundo plano com execução garantida, independentemente da versão do Android.
  • Worker é a classe base para definir a lógica de uma tarefa em segundo plano, que a biblioteca executa em uma thread separada.
  • WorkRequest pode ser único (OneTimeWorkRequest) e periódico (PeriodicWorkRequest) com intervalo mínimo de 15 minutos.
  • Cadeias de tarefas permitem organizar a execução sequencial ou paralela de vários Workers.
  • Restrições definem as condições de início: carga da bateria, conexão de rede, estado do armazenamento.

O que é WorkManager?

WorkManager faz parte do Android Jetpack, uma biblioteca para gerenciar tarefas em segundo plano que devem ser executadas com garantia, independentemente de o aplicativo estar em primeiro plano ou ter sido fechado pelo usuário. A biblioteca suporta API 14+ e seleciona automaticamente o mecanismo de execução apropriado: JobScheduler no Android 5+, BroadcastReceiver + AlarmManager em versões mais antigas.

A principal característica do WorkManager é a execução garantida. Se uma tarefa não foi concluída devido a reinicialização do dispositivo, fechamento do aplicativo ou falha, o WorkManager a reiniciará na primeira oportunidade. Isso torna a biblioteca uma escolha ideal para tarefas críticas de execução: envio de análises, sincronização de banco de dados, upload de logs.

Ao contrário do Background Service, o WorkManager não requer gerenciamento de threads e ciclo de vida. A própria biblioteca cria um pool de threads, lida com o Modo Doze, leva em conta a versão do Android e fornece uma API unificada independentemente do nível de API. O suporte a corrotinas e RxJava está disponível através de CoroutineWorker e RxWorker, respectivamente.

Observação de estado via LiveData

O WorkManager fornece suporte integrado para LiveData para rastrear o estado das tarefas. O método getWorkInfoByIdLiveData retorna LiveData<WorkInfo> que é atualizada a cada mudança de estado: ENQUEUED, RUNNING, SUCCEEDED, FAILED, CANCELLED. Isso permite que os componentes da UI reajam a mudanças sem consulta manual do agendador e sem vazamentos de memória graças aos componentes Lifecycle-aware.

kotlin
WorkManager.getInstance(context)
    .getWorkInfoByIdLiveData(syncRequest.id)
    .observe(viewLifecycleOwner) { workInfo ->
        when (workInfo.state) {
            WorkInfo.State.SUCCEEDED ->
                showSuccess()
            WorkInfo.State.FAILED ->
                showError(workInfo.outputData)
            else ->
                showProgress()
        }
    }

Como funciona o WorkManager?

A arquitetura do WorkManager é construída em torno de três classes base: Worker, WorkRequest e WorkManager. O Worker contém a lógica da tarefa, o WorkRequest descreve os parâmetros de execução e o WorkManager gerencia a fila e o agendamento. A biblioteca usa um banco de dados Room interno para armazenar o estado de todas as tarefas.

Worker e WorkRequest

Worker é uma classe abstrata com um único método doWork que é chamado em uma thread em segundo plano. O método retorna ListenableWorker.Result — SUCCESS, FAILURE ou RETRY. O WorkRequest vincula o Worker com parâmetros: tempo limite, tag, atraso inicial e restrições.

kotlin
class SyncWorker(
    context: Context,
    params: WorkerParameters
) : Worker(context, params) {

    override fun doWork(): Result {
        return try {
            val api = RetrofitClient.api
            val response = api.syncData()
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

Agendamento via WorkManager

WorkManager agenda tarefas de forma uniforme, independentemente da versão do Android. Ao chamar enqueue, a biblioteca salva a tarefa no Room, avalia as condições atuais e seleciona o momento ideal de execução. Internamente, pode usar JobScheduler, AlarmManager ou seu próprio agendador — o desenvolvedor não precisa se preocupar com isso.

kotlin
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
    .setInitialDelay(15, TimeUnit.MINUTES)
    .addTag("sync")
    .build()

WorkManager.getInstance(context)
    .enqueue(syncRequest)

Tipos de WorkRequest

WorkManager suporta dois tipos de solicitações de execução: únicas e periódicas. A escolha do tipo depende do cenário: a tarefa deve ser executada uma vez ou repetida em um intervalo determinado.

OneTimeWorkRequest

OneTimeWorkRequest é projetado para tarefas que devem ser executadas uma única vez. Pode ser o envio de um log, sincronização de dados após autorização, download de configuração no primeiro início. O atraso é definido via setInitialDelay e as restrições via setConstraints.

PeriodicWorkRequest

PeriodicWorkRequest é adequado para tarefas repetitivas com intervalo mínimo de 15 minutos. A biblioteca garante que o intervalo entre execuções não será menor que o especificado, mas pode ser maior devido a restrições do dispositivo. Para tarefas com frequência inferior a 15 minutos, use Handler ou Timer no Foreground Service.

ParâmetroOneTimeWorkRequestPeriodicWorkRequest
Frequênciaúnicarepetida (mín. 15 min)
Quantidade1 execuçãoaté cancelamento
AtrasosetInitialDelaysetInitialDelay
Cadeiassuportanão
Usodownload, sincronizaçãomonitoramento, sondagem

Configuração de restrições e cadeias de tarefas

As restrições no WorkManager permitem definir condições sob as quais uma tarefa pode ser iniciada: conexão de rede (NetworkType), nível de bateria (batteryNotLow), estado do armazenamento (StorageNotLow) e modo ocioso (DeviceIdle). A tarefa não será iniciada até que todas as restrições sejam atendidas.

kotlin
val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .setRequiresCharging(true)
    .setRequiresBatteryNotLow(true)
    .build()

val request = OneTimeWorkRequestBuilder<ImageUploadWorker>()
    .setConstraints(constraints)
    .build()

As cadeias permitem organizar a execução sequencial ou paralela de tarefas. beginWith inicia uma cadeia, em seguida, adiciona o próximo Worker que será executado após a conclusão bem-sucedida do anterior. Para execução paralela, use workManager.enqueue(listOf(request1, request2)).

kotlin
WorkManager.getInstance(context)
    .beginWith(compressWorker)
    .then(uploadWorker)
    .then(cleanupWorker)
    .enqueue()
    // compress -> upload -> cleanup sequencialmente

Migração do JobScheduler para WorkManager

JobScheduler foi introduzido no Android 5 (API 21) como um serviço de sistema para agendar tarefas em segundo plano. O WorkManager veio para substituí-lo, oferecendo uma API multiplataforma com migração automática e capacidades adicionais: cadeias, garantia de execução, tags, observação de estado via LiveData.

Ao migrar do JobScheduler para WorkManager, você precisará converter JobService em Worker, substituir JobInfo por WorkRequest e Context.getSystemService pela API do WorkManager. O WorkManager lida automaticamente com problemas de compatibilidade e lida com o Modo Doze de forma mais correta do que uma implementação manual de JobScheduler. Passos da migração: 1) criar uma classe Worker, 2) construir um WorkRequest com as mesmas condições, 3) remover JobService e JobInfo do código e manifesto.

UniqueWork para tarefas únicas

WorkManager suporta o conceito de tarefas únicas através de ExistingWorkPolicy. Se uma tarefa com o nome especificado já existir, a política determina o comportamento: KEEP (não criar uma nova), REPLACE (substituir a existente), APPEND (adicionar ao final da cadeia) e APPEND_OR_REPLACE. UniqueWorkRequest é conveniente para tarefas que não devem ser duplicadas: sincronização de banco de dados, download de configuração, envio de lote de análises.

kotlin
WorkManager.getInstance(context)
    .enqueueUniqueWork(
        "sync_data",
        ExistingWorkPolicy.KEEP,
        syncRequest
    )

Gerenciamento de progresso e resultados intermediários

CoroutineWorker suporta o mecanismo setProgress, permitindo passar resultados intermediários de execução. Isso é útil para operações longas: download de arquivo grande, processamento em lote de imagens, migração de banco de dados. A UI pode se inscrever em atualizações via getWorkInfosByTagLiveData e exibir o progresso em tempo real. O método ForegroundInfo também está disponível para executar um Worker como Foreground Service com uma notificação se a tarefa deve ser visível ao usuário.

kotlin
class ProgressWorker(
    context: Context,
    params: WorkerParameters
) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        val total = 100
        for (i in 1..total) {
            setProgress(
                workDataOf("progress" to i)
            )
        }
        return Result.success()
    }
}

InputData e OutputData para transferência de dados

WorkManager suporta transferência de dados entre Workers via InputData e OutputData. InputData é criado durante a construção do WorkRequest através de Data.Builder e é passado para o Worker através de inputData. Após a execução, o Worker cria OutputData via workDataOf ou Data.Builder e retorna junto com Result.success(outputData). O próximo Worker na cadeia recebe o outputData do anterior como seu inputData. Os dados são armazenados no formato chave-valor com suporte para tipos básicos: String, Int, Long, Boolean, Double. O tamanho máximo de Data é 10 KB.

Na prática, muitos projetos usam WorkManager como o único agendador de tarefas em segundo plano. O Google recomenda migrar todos os JobService existentes para WorkManager, especialmente em aplicativos que suportam Android 4.4 (API 19) e inferiores, onde o JobScheduler não está disponível e o WorkManager usa um mecanismo de fallback via AlarmManager e BroadcastReceiver. Para testes, o WorkManager fornece TestListenableWorkerBuilder e TestWorkerBuilder, que permitem testar Workers em testes JUnit sem um agendador real.

Para testar o WorkManager, use TestListenableWorkerBuilder do AndroidX Test, que permite executar Workers em um ambiente isolado e verificar o Result retornado. A biblioteca fornece suporte completo para JUnit e Robolectric para testes unitários sem um agendador real. No geral, o WorkManager é adequado para 80% das tarefas onde antes eram usados Service ou JobScheduler.

Perguntas frequentes

O WorkManager garante a execução da tarefa após reinicialização do dispositivo?

Sim, o WorkManager garante a execução mesmo após a reinicialização. A biblioteca salva todas as tarefas incompletas em um banco de dados Room e as restaura usando BroadcastReceiver que é acionado após a inicialização do sistema.

Qual é a diferença entre Worker, CoroutineWorker e RxWorker?

Worker executa em uma thread em segundo plano sem suporte a corrotinas ou RxJava. CoroutineWorker usa corrotinas Kotlin com suporte a funções suspend e cancelamento via escopo de corrotina. RxWorker trabalha com Observable e Single, adequado para cadeias reativas.

Como cancelar uma tarefa no WorkManager?

Use workManager.cancelWorkById(id) ou workManager.cancelAllWorkByTag("tag"). A biblioteca também fornece o método cancelUniqueWork("name") para cancelar tarefas únicas com o nome especificado.

Qual é o intervalo mínimo para PeriodicWorkRequest?

O intervalo mínimo para PeriodicWorkRequest é de 15 minutos. Esta limitação é definida pelo Google para evitar consumo excessivo de bateria. Se uma tarefa precisar ser executada com mais frequência, use Foreground Service ou Handler com um temporizador.

O WorkManager suporta Android 4.4 e versões anteriores?

Sim, o WorkManager suporta API 14+. Em dispositivos sem JobScheduler (abaixo de API 21), a biblioteca usa uma combinação de AlarmManager e BroadcastReceiver para agendamento de tarefas. Isso torna o WorkManager uma solução universal para tarefas em segundo plano.

Resumo

  • WorkManager é uma biblioteca Jetpack moderna para tarefas em segundo plano com execução garantida em todas as versões do Android.
  • Três classes base — Worker, WorkRequest e WorkManager — cobrem todos os cenários de agendamento e execução.
  • Dois tipos de solicitações — OneTimeWorkRequest e PeriodicWorkRequest — para tarefas únicas e repetitivas.
  • Restrições (rede, bateria, armazenamento) protegem a tarefa de ser executada em condições desfavoráveis.
  • Cadeias de tarefas garantem a execução sequencial de Workers com passagem de resultado.
  • CoroutineWorker e RxWorker suportam programação assíncrona através de corrotinas e RxJava.
  • WorkManager substitui JobScheduler, Service e AlarmManager na maioria dos cenários de tarefas em segundo plano.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também