Meu plugin minha vida — BackGround Services

Thiago Bertuzzi
4 min readOct 18, 2018

--

Fala galera,

Beleza?

Acho que uma pergunta e um assunto comum que eu sempre vejo o pessoal falar , é sobre como executar tarefas em background.

Como o app do facebook por exemplo, que atualiza seu feed.

Eu poderia fazer um Artigo explicando como fazer isso com Xamarin.Android e Xamarin.iOS, mas porque não com Xamarin.Forms?

Este sera o ultimo artigo da Serie do Leitor de RSS, que eu comecei apenas mostrando um plugin da Microsoft que faz isso, mas graças a Alguns feedbacks que recebi, me perguntando outras coisas eu resolvi fazer 3 artigos e completar o app :D

Por isso, me mandem feedbacks. Pode ser pelo próprio Medium , ou pelo twitter . Se eu conhecer sobre o assunto/controle/plugin, sera um prazer lhe ajudar e fazer um artigo ;) .

Antes de continuar devo avisar que é bom você ler e implementar os artigos :

· Meu Plugin minha vida — Lendo RSS com Xamarin.Forms

· O X do Xamarin Forms — Armazenando cache com Monkey Cache :P

Pois utilizarei o código gerado dos dois, para implementar o Serviço em Background.

Como disse existe uma forma de fazer isso nativo nas plataformas, mas existe um plugin sensacional que resolve isso : Matcha.BackgroundService.

Bora ver como utiliza-lo :D

Configurando o plugin

Vamos ao nuget instalar o pacote Matcha.BackgroundService,instale em todos os projetos :

Warning: Estou utilizando o projeto ExemploMonkeyCache para demonstrar esse plugin. Não se esqueça de ver os artigos anteriores!

Vamos inicializar o plugin no iOS:

E no Android:

Perfeito! Agora vamos alterar nosso App de RSS para atualizar em BackGround!

Implementando o Plugin

Primeiro precisamos criar uma classe que implemente a IPeriodicTask, que sera responsável por executar a tarefa:

Em seguida, vamos implementar para que obtenha o RSS e grave em nosso MonkeyCache:

Como podem ver eu apenas coloquei o código GravarRSS() que existia na MainViewModel.

Agora vamos alterar nossa MainViewModel :

Basicamente, nós comentamos o método de gravar e no carregar eu adicionei uma verificação para ele apenas exibir a lista após o primeiro carregamento do nosso cache.

Agora para funcionar, vamos iniciar o BackGroundService no App.cs, configurando para verificar a cada minuto :

Pronto! Vamos rodar :

Assim que abrir ele vai aguardar o cache estar preenchido, em seguida exibir a lista.

Agora a cada 1 minuto, ele verifica se existem informações novas e atualiza o Cache.

Ao usuário puxar para atualizar ou abrir o app novamente, as informações ja estarão atualizadas.

Acabou ? Não, eu sei o que você esta pensando, mas eu queria que fosse automático .. Ok,Vamos alterar as coisas mais uma vez :D

Nessa caso vamos receber ajuda do nosso querido MessagingCenter, vamos utilizar ele para avisar o feed , quando o RSS for atualizado.

Mas lembre-se , isto é apenas para demonstrar um update automático. É sempre bom pensar na usabilidade, você não gostaria de um Feed atualizando a cada 1 minuto na sua cara , não é ?

Outro ponto que vou ressaltar, é que estou apenas utilizando o MessagingCenter para demonstrar no exemplo, podem existir formas melhores.. Cada caso é um caso.

Vamos alterar o MainViewModel.cs , para adicionar o MessagingCenter, e alterar o método CarregarRSS:

A ideia é assim que o app Abrir Carregar o Feed do Cache, possibilitar o usuário verificar se existem novos RSS ao puxar, e atualizara o Feed Automaticamente se existirem novos dados.

Notem que no próprio messagingCenter eu recebo a coleção de objetos, ela sera enviada assim que existirem novos dados.

Agora vamos alterar o PeriodicRSSFeedService, criando uma variável auxiliar ,para caso existe pelo menos 1 item novo, ele avise ao messagingCenter :

Pronto! Agora ao abrir você pode ver, que após o serviço carregar a lista atualiza sozinha.

Bacana não ? Se quiserem depois posso escrever um artigo falando só do MessagingCenter :D ( que eu tenho medo de algumas gambiarras que são feitas por alguns neles … prefiro nem comentar :P ..)

Se quiserem podem baixar o exemplo utilizado clicando aqui.

Quer ver outros artigos sobre Xamarin ? Clique aqui.

Espero ter ajudado!

Aquele abraço!

--

--

Thiago Bertuzzi
Thiago Bertuzzi

Written by Thiago Bertuzzi

Microsoft MVP,Gamer, Desenvolvedor e apaixonado por tecnologia!