Trabalho persistente Parte do Android Jetpack.
O trabalho é persistente quando permanece agendado após as reinicializações do app e do sistema é reinicializado. O WorkManager é a solução recomendada para trabalhos persistentes. Como é melhor realizar a maioria dos processamentos em segundo plano com trabalho persistente, O WorkManager também é a principal API recomendada para execução em segundo plano. processamento 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 do que 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, você e não os use para trabalhos persistentes. É importante observar que as corrotinas é uma estrutura de simultaneidade, enquanto o WorkManager é uma biblioteca para funcionam. 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 todos os sistemas Android anteriores
APIs de programação em segundo plano, incluindo o FirebaseJobDispatcher
,
GcmNetworkManager
e JobScheduler
.
Primeiros passos
Consulte o Guia de iniciação para começar a usar o WorkManager 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 (em inglês), da versão 2019 do Android Dev Cume