Como agendar tarefas encadeadas usando o WorkManager?

Haldny Santos
2 min readJun 15, 2018

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ó?

Cabeça Fervendo?

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!

--

--

Haldny Santos

Dad(Enzo) & Husband(@rafaela.araujo.silva) | Software Engineer at @inovacao_cesar | Android | Soccer Lover | Creative