Melhores Android apps com RxAndroid

01 June 2015

Como melhorar suas aplicações Android com RxAndroid?

Uma das tecnologias que mais tem se falado entre os desenvolvedores Android é o RxJava. Utilizando do paradigma que é chamado de Functional Reactive Programming, o RxJava e sua implementação pra Android, o RxAndroid, conseguem facilitar a vida do programador Android em uma série de pontos.

Problemas

Pra conseguir entender o que exatamente o RxAndroid ajuda tanto, precisamos ter alguns problemas. Dessa maneira podemos entender o que ele poderá fazer pra facilitar as coisas.

Se você já fez algum aplicativo comercial em Android, grandes são as chances de você ter precisado acessar alguma API ou serviço externo e, depois de processar algumas informações, você precisa atualizar a interface. Essa tarefa, comum e ordinária na maioria das aplicações, é de grande complexidade para os programadores Android. Por quê?

Tarefas que rodam em background

Talvez aqui você possa dizer..."Não vejo nenhum problema em backgoud tasks. Utilizo a classe AsyncTask e tudo funciona muito bem.". Se sua resposta é essa, acredito que você tenha se acostumado a fazer as coisas dessa forma e não que realmente tenha atacado todos os problemas dessa abordagem.

Por exemplo, quando uma requisição para um web service é feita e durante esse processo, antes de atualizar a interface com o resultado, o usuário gira o device? A Activity é destruida nesse momento e você precisa contornar uma série de problemas que isso causa, deixando muitas vezes alguns NullPointerExceptions para trás.

Uma outra saída é utilizar um AsyncTaskLoader pra tentar contornar alguns dos problemas. Mesmo assim, ainda teremos complicações. Como fica o tratamento de erros nesse caso? Nenhum dos 2 métodos sobrescritos, doInBackground() ou onPostExecute(), parecem ser ideais pora isso. Você vai ter que jogar aquele lindo try/catch lá no meio e se virar por lá. E assim, cada desenvolvedor cria sua própria forma de tratar as as exeções, complicando bastante o código.

Poderia citar ainda problemas relativos a multiplas chamadas a web services, que precisam ser orquestradas nesse meio tempo ou que precisam ser executadas em paralelo e esperar uma resposta de uma combinação de operações. Além diso, nem precisamos falar que numa situação dessas os testes aqui ficam pra depois, quando der tempo, certo?

RxAndroid | Basics

Com um pouco de trabalho podemos resolver os problemas acima usando RxAndroid. A base para o paradigma de programação reativa são os Observables e os Subscribers. Por um momento parece muito com outras ferramentas de PubSub. Existe um Observable que emite itens e um Subscriber que os consome.

Existe um padrão na forma de emitir as mensagens. Um Observable emite quantos itens quiser e então finaliza, sinalizando se as operações foram finalizadas com sucesso ou se tivemos um erro. Para cada Subscriber que ele tem, um Observable chama o Subscriber.onNext(), quantas vezes forem necessárias, seguido por um Subscriber.onComplete() ou um Subscriber.onError().

Code!

Vamos começar a ter uma ideia de como tudo isso funciona. Primeiro, vamos começar pelo Observable. Ele vai emitir um simples "Hello World!" e completar a execução.



Agora vamos ver a implementação do Subscriber que vai consumir essa informação. Ele vai somente imprimir as informações emitidas pelo Observable.



Enfim, precisamos linkar os dois...precisamos "subscrever" um Subscriver ao Observable.



Legal, mas...e ai?

Nesse momento você pode deve estar achando que isso é um código interessante e diferente, mas o que isso de fato resolveu? Existem outros passos importante pra conseguirmos utilizar RxAndroid em aplicativos. Existem Operators e Maps que precisam ser entendidos, além da liguagem com lambdas do Java 8 que é a forma mais usada hoje pra esse tipo de código.

Pra chegar lá, mais post precisarão ser escritos. Se você se interessou pelo assunto não deixe de seguir pelos links abaixo:

Erik Meijer: Rx in 15 Minutes

Functional Reactive Programming in the Netflix API
comments powered by Disqus