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.
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!!!
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:
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:
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:
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!