WorkManager — O que é? Como usar?

O que é o WorkManager?

No Google IO 2018 foi liberado o Android Jetpack, um conjunto de bibliotecas, ferramentas e orientações arquiteturais para ajudar, tornar rápido e facilitar a criação de aplicativos para Android.

O WorkManger esta incluído no Jetpack, mas, o que é o WorkManager? É uma API que facilita a especificação de tarefas assíncronas, levando em consideração a periodicidade e as condições em que as tarefas serão executadas. Usando um conjunto de APIs, que falarei abaixo, podemos criar uma tarefa e entregá-la ao WorkManager para execução imediata ou no momento apropriado.

Lista de tarefas pré-feriado

Por exemplo, imagine que nosso aplicativo tenha que fazer o download de um podcast semanalmente. Usando essas classes, você pode configurar esta tarefa, escolher as circunstâncias apropriadas para execução(como “somente enquanto o dispositivo estiver conectado à internet”) e entregá-la ao WorkManager para ser executada quando as condições forem atendidas. Sua tarefa está garantida para ser executada, mesmo se o aplicativo for forçado a sair ou o dispositivo for reinicializado.

O WorkManager consegue escolher qual a melhor forma de executar as tarefas baseadas no estado do aplicativo e no nível da API utilizada. Se ele executar uma tarefa enquanto o aplicativo estiver em execução, poderá fazer isto em uma nova thread no processo do seu aplicativo. Se o aplicativo não estiver em execução, ele vai escolher uma maneira apropriada de agendar a tarefa em segundo plano, levando em consideração o nível da API do dispositivo e das dependências incluídas, neste caso, ele poderá usar JobScheduler, Firebase Job Dispatcher ou AlarmManager.

Agora, vamos ver um pouco do que conseguimos fazer!!!

Vamos lá usar o WorkManager!!!

Como usar o WorkManager?

Vamos lá, primeiramente devemos adicionar o WorkManager em nosso aplicativo, para isto, devemos adicionar no arquivo “build.gradle” da aplicação as seguintes linhas abaixo:

build.gradle file

O nosso segundo passo é criar o nosso Worker e implementar o método doWork, onde iremos fazer a tarefa, o método doWork retorna um Worker.Result e podemos ter três retornos:

FAILURE — Em caso de falha ou de não conformidades.

RETRY — Significa que houve um erro transitório, ou seja, se o dispositivo perdeu a conexão de rede no meio, então teremos que tentar novamente depois de algum tempo.

SUCCESS — Quando a execução for completada com sucesso.

Logo abaixo, temos um exemplo ao qual usamos uma url passada como parâmetro e requisitamos um download ao DownloadManager:

DownloadWorker.java

Como podemos ver acima, podemos adicionar dados ao retorno do método doWork através do método setOutputData passando um Data como parâmetro.

Por fim, vamos agendar a nossa tarefa…

Mas, antes disso, deixa eu te mostrar alguns Componentes importantes para fazer isto. Primeiro, temos dois tipos de WorkRequest implementados: OneTimeWorkRequest e PeriodicWorkRequest.

OneTimeWorkRequest: Uma classe que representa uma solicitação para trabalho não repetitivo. Exemplo: Fazer o upload de uma foto ao clicar no botão.

PeriodicWorkRequest: Uma classe que representa uma solicitação para trabalhos que tem uma repetição. Exemplo: Baixar o podcast toda semana sem que o usuário use o aplicativo.

Logo abaixo, temos um exemplo ao qual estamos agendando um download ao entrar na activity:

MyActivity.java

E uma das coisas mais legais, é que voce pode adicionar Constraints para que a sua task seja executada apenas quando satisfazer essas condições, no exemplo acima, o DownloadWorker será executado apenas quando o device estiver conectado à internet.

Outra coisa legal, é que podemos ficar observando a mudança de estados da nossa tarefa e tomar alguma decisão baseado neles:

~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!

~Gostaria de agradecer à Rodrigo Perazzo por me encorajar a escrever e revisar meu texto!