Reaktív programozás Androidon
Erdődy-Nagy Zsombor

Miről lesz szó?
- Reaktív programozás ízelítő
- Bevezető operátorok
- Alkalmazott RxJava minták
- Előnyök, hátrányok
Reaktív programozás
- Problémák megoldása komponálható reaktív streamekkel
- RxJava: de-facto Rx implementáció a Java világban
- Hasznos linkek gyűjteménye kezdéshez: http://bit.ly/21nTbGj
Rx Stream
- Egy Rx Stream 0...* T típusú eseményt küld, majd
- ... vagy egy 'Completed' jelzést
- ... vagy egy 'Error' jelzést
- ... semmit - végtelen stream
- Más néven Observable
Rx Operátorok - Map
Rx Operátorok - Filter
Rx Operátorok - Zip
Egy egyszerű példa
Observable.range(0, Integer.MAX_VALUE)
.observeOn(Schedulers.computation())
.take(6)
.filter(it -> it % 2 == 0)
.map(it -> String.valueOf(it) + ' ')
.reduce(new StringBuilder(), StringBuilder::append)
.observeOn(Schedulers.io())
.toBlocking()
.subscribe(System.out::println);
// Output: 0 2 4Élő példák
Skyscanner Android App
Autosuggest
autosuggestInput
.observeOn(Schedulers.io())
.throttleLast(250, TimeUnit.MILLISECONDS)
.distinctUntilChanged()
.switchMap(input -> {
return autosuggestManager.autosuggest(input);
})
.observeOn(AndroidSchedulers.mainThread)
.subscribe(results -> ...);

Korábbi keresések
Observable.zip(
// Get recent searches
recentSearchStore.getRecentSearches(),
// Get Price Alerts
priceAlertStore.getPriceAlerts(),
// Get latest saved search configuration
searchConfigStore.latestSearchConfig(),
(searches, alerts, lastConfig) -> {
// Batch the data based on common City
...
})
.flatMap(batched -> {
// Get images for the cities
return Observable.zip(
Observable.just(batched),
imageStore.getCityImage(batched.cityId()),
(ars, s) -> ars.setImageUrl(s));
});

+
- Boilerplate kód--
- Kódminőség++
- Igen aktív RxJava közösség
- Közös, de-facto minta:
- Folyamatok komponáláshoz
- Folyamatok leállításához
- Folyamatok hibáinak kezeléséhez
- Többszálúság kezeléséhez
-
- Tanulási görbe
- Debug nehézségek++
- Cargo-cult coding hatványozottan veszélyes
Köszönöm a figyelmet
-
Kérdések?
Reaktív programozás Androidon - HWSW
By rzsombor
Reaktív programozás Androidon - HWSW
- 718