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