Essa palestra fala sobre o uso de RxJava e RxAndroid am projetos de Android nativo. Explicando suas vantagens e, relações as APIs nativas do mundo Android.
2. O objetivo dessa apresentação é
mostrar um pouco do poder do
RxJava o porque dele ser incrível
2
3. Quem sou eu
• Clêrton Leal
• Nascido e criado em Fortaleza
• Vivendo em Belo Horizonte a pouco mais de 2 meses
• Atualmente trabalhando como consultor para Avenue Code
3
4. Um pouco de história
Será rápido eu prometo =)
4
5. Reactive Extensions é uma biblioteca, de programação
orientada a eventos, desenvolvida pela Microsoft e liberada
para o .NET framework em 2011.
Implementa e extende o padrão Observable clássico, porem
com um tratamento mais refinado para threads.
5
6. Em 2012 a Netflix adota o uso de Reactive Extensions para
seus módulos escritos em .NET e fica surpresa com a
facilidade de programação assíncrona.
Em 2013 a Netflix libera um projeto open source chamado
RxJava, uma implementação da especificação RX para Java.
Possibilitando assim o uso de RX em todos os seus módulos
escritos em Java e Scala.
6
13. RxSwift
let source = Observable.create { observer in
do {
for i in 1...5 {
observer.on(.Next(i))
}
observer.on(.Completed)
} catch {
observer.on(.Error)
}
}
13
27. Schedulers
• Schedulers.computation() - Usado para ações em CPU
bound em multi thread.
• Schedulers.io() - Usado para ações em IO bound.
• Schedulers.newThread() - Execução em nova thread.
• Schedulers.immediate() - Execução na thread atual.
• Schedulers.trampoline() - Execução na thread atual, mas
apenas após outras ações enfileiradas.
27
30. Em quantas linhas?
• Campo de texto irá buscar em um
serviço web
• Buscas feitas apenas com pelo
menos 3 caracteres
• Buscas feitas apenas quando o
usuário passar 500 milissegundos
sem digitar
30
31. Precisamos criar um observable
do SearchView
public Observable<String> getSearchObservable(SearchView searchView) {
return Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
subscriber.onNext(newText);
return true;
}
});
}
});
}
31
32. E depois aplicar algumas
transformações
public Observable<String> getSearchObservable(SearchView searchView) {
return Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
subscriber.onNext(newText);
return true;
}
});
}
}).filter(s -> fragment != null)
.map(s -> "http://search.com.br/" + s)
.filter(s -> s.length() >= 3)
.debounce(500, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.computation());
32
33. E apenas isso na sua camada de
visão
getSearchObservable(searchField).subscribe(s -> {
doRequest();
})
33
35. Facil de cancelar
• Sempre que chamamos o método subscribe(), o retorno do
mesmo é uma Subscription.
• Uma subscription pode ser facilmente cancelada.
Subscription subscription = getSearchObservable(searchField).subscribe(s -> {
doRequest();
});
subscription.unsubscribe();
35