Como agendar tarefas encadeadas usando o WorkManager?
No meu post anterior, mostrei como fazer trabalhos em background utilizando a API do WorkManager, neste post, irei falar sobre como encadear tarefas em background.
Para clarificar, irei fazer uma aplicação de exemplo, onde iremos: baixar, descomprimir e validar o conteúdo de um arquivo ZIP.
Huuum… mas, eu não poderia fazer isso usando foreground service? Sim, é possível! Porém, a notificação mostrada ao usuário não é tão elegante.
Huuum… então, eu poderia criar job schedulers! Sim, é possível! Porém, a API do JobScheduler não é tão simples e indo um pouco além, você criaria 3 jobs(controlaria as transições entre eles, caso de falha, erro ou re-tentativa) ou faria tudo em um job só?
Fique tranquilo, também já me fiz essas perguntas e fiquei com a cabeça fervendo, mas, usando uma nova abordagem com o WorkManager podemos acabar com esse tormento.
1. Criando os Workers
O nosso primeiro passo é criar cada tarefa, então vamos de código!
2. Encadeando as tarefas
Agora que já definimos nossas tarefas, precisamos encadeá-las.
Acima, vimos que para encadear, precisamos informar qual o primeiro trabalho a ser executado através do método beginWith e quais serão as tarefas seguintes no método then, um ponto importante a ser ressaltado é que a ordem em que você empilha as tarefas é a mesma ordem em que elas serão executadas dentro do mesmo WorkContinuation.
3. Podemos encadear tarefas em paralelo
Sim, isto é possível. Pense no caso em que ao finalizar os nossos processos (baixar, descomprimir e validar), exista a necessidade de notificar o usuário e enviar um e-mail. Essas tarefas podem/devem serem executadas em paralelo, pois, não existe relação de precedência entre elas. Então vamos lá codar!
Se você precisar criar sequências mais complexas, poderá associar várias cadeias usando o método combine do WorkContinuation.
Você pode encontrar o código usado neste artigo no meu github.
~Se você gostou deste artigo, clique no 👏 abaixo para que mais pessoas possam vê-lo. Também você pode me seguir no Medium, e ai você pode receber atualizações sobre o meu próximo artigo!