Trabalho persistente Parte do Android Jetpack.
O trabalho é persistente quando permanece agendado após as reinicializações do app e do sistema. O WorkManager é a solução recomendada para trabalhos persistentes. Como a maior parte do processamento em segundo plano é melhor realizada com trabalho persistente, o WorkManager também é a API principal recomendada para processamento em segundo plano em geral.
Tipos de trabalho persistente
O WorkManager processa três tipos de trabalho persistente:
- Imediato: tarefas que precisam começar imediatamente e terminar em breve. Podem ser priorizados.
- De longa duração: tarefas que podem ser executadas por mais tempo, potencialmente mais de 10 minutos.
- Adiável: tarefas programadas que começam posteriormente e podem ser executadas periodicamente.
A Figura 1 descreve como os diferentes tipos de trabalho persistente se relacionam.
Da mesma forma, a tabela abaixo descreve os vários tipos de trabalho.
Tipo | Periodicidade | Como acessar |
---|---|---|
Imediata | Uma vez | OneTimeWorkRequest e Worker . Para trabalhos priorizados, chame setExpedited() na OneTimeWorkRequest. |
De longa duração | Uma vez ou periódico | Qualquer WorkRequest ou Worker . Chame setForeground() no worker para processar a notificação. |
Adiável | Uma vez ou periódico | PeriodicWorkRequest e Worker . |
Para saber mais sobre como configurar o WorkManager, consulte o guia Como definir WorkRequests.
Recursos do WorkManager
Além de oferecer uma API mais simples e consistente, o WorkManager tem vários outros benefícios importantes:
Restrições de trabalho
Defina de forma declarativa as condições ideais para a execução do trabalho usando restrições de trabalho. Por exemplo, executar apenas quando o dispositivo estiver em uma rede ilimitada, quando o dispositivo estiver ocioso ou com bateria suficiente.
Agendamento robusto
O WorkManager permite que você agende um trabalho para ser executado uma única vez ou repetidamente usando períodos de agendamento flexíveis. O trabalho também pode receber uma tag e um nome, o que possibilita agendar trabalhos exclusivos e substituíveis e monitorar ou cancelar grupos de trabalho ao mesmo tempo.
O trabalho agendado é armazenado em um banco de dados SQLite gerenciado internamente, e o WorkManager se encarrega de garantir que esse trabalho persista e seja agendado novamente durante as reinicializações do dispositivo.
Além disso, o WorkManager está em compliance com os recursos de economia de energia e as práticas recomendadas, como o modo Soneca. Assim, você não precisa se preocupar com esses aspectos.
Trabalho priorizado
Você pode usar o WorkManager a fim de agendar trabalhos imediatos para execução em segundo plano. Use o Trabalho priorizado em tarefas que são importantes para o usuário e podem ser concluídas em poucos minutos.
Política flexível de nova tentativa
Às vezes, o trabalho falha. O WorkManager oferece políticas flexíveis de nova tentativa, incluindo uma política de espera exponencial configurável.
Encadeamento de trabalho
Para trabalhos complexos relacionados, encadeie tarefas de trabalho individuais usando uma interface intuitiva que possibilita controlar quais tarefas são executadas sequencialmente e quais são executadas em paralelo.
Kotlin
val continuation = WorkManager.getInstance(context) .beginUniqueWork( Constants.IMAGE_MANIPULATION_WORK_NAME, ExistingWorkPolicy.REPLACE, OneTimeWorkRequest.from(CleanupWorker::class.java) ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java)) .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java)) .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java)) .then( if (save) { workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT) } else /* upload */ { workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT) } )
Java
WorkManager.getInstance(...) .beginWith(Arrays.asList(workA, workB)) .then(workC) .enqueue();
Para cada tarefa de trabalho, é possível definir dados de entrada e saída do trabalho em questão. Ao encadear trabalhos, o WorkManager transmite automaticamente os dados de saída de uma tarefa de trabalho à próxima.
Interoperabilidade de linha de execução integrada
O WorkManager se integra perfeitamente a corrotinas e ao RxJava e oferece a flexibilidade de conectar suas próprias APIs assíncronas.
Usar o WorkManager para trabalhos confiáveis
O WorkManager é destinado ao trabalho que precisa ser executado de forma confiável, mesmo que o usuário saia de uma tela, o app seja encerrado ou o dispositivo seja reiniciado. Por exemplo:
- ao enviar registros ou análises para serviços de back-end;
- na sincronização periódica de dados do app com um servidor.
O WorkManager não se destina a trabalhos em andamento em segundo plano que podem ser encerrados com segurança quando o processo do app é encerrado. Ele também não é uma solução geral para todo trabalho que exige execução imediata. Consulte o guia de processamento em segundo plano para ver qual solução atende às suas necessidades.
Relação com outras APIs
Embora as corrotinas sejam a solução recomendada para determinados casos de uso, não as use para trabalhos persistentes. É importante observar que as corrotinas são um framework de simultaneidade, enquanto o WorkManager é uma biblioteca de trabalho permanente. Da mesma forma, use o AlarmManager apenas para relógios ou agendas.
API | Recomendado para | Relação com o WorkManager |
---|---|---|
Corrotinas | Todo trabalho assíncrono que não precisa ser persistente. | As corrotinas são a forma padrão de sair da linha de execução principal no Kotlin. No entanto, elas saem da memória quando o app é fechado. Para trabalhos persistentes, use o WorkManager. |
AlarmManager | Apenas alarmes. | Ao contrário do WorkManager, o AlarmManager ativa um dispositivo no modo Soneca. Portanto, ele não é eficiente em termos de gerenciamento de recursos e energia. Não o use para trabalhos em segundo plano, apenas para alarmes ou notificações precisos, como eventos da agenda. |
Substituir APIs descontinuadas
A API WorkManager é a substituição recomendada para todas as APIs anteriores de agendamento em segundo plano
do Android, incluindo FirebaseJobDispatcher
,
GcmNetworkManager
e JobScheduler
.
Começar
Consulte Introdução ao WorkManager para começar a usá-lo no app.
Outros recursos
As seções a seguir fornecem alguns recursos adicionais.
Vídeos
- Workmanager - MAD Skills, série de vídeos (em inglês)
- Como trabalhar com o WorkManager (em inglês), da Conferência de Desenvolvedores Android 2018
- WorkManager: além do básico, da Conferência de Desenvolvedores Android 2019