Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Intro to reactive programing
Search
Fernando Franco Gíraldez
December 01, 2021
Programming
0
47
Intro to reactive programing
Small introduction into rx-java 2.X and it's core element and how to use it
Fernando Franco Gíraldez
December 01, 2021
Tweet
Share
More Decks by Fernando Franco Gíraldez
See All by Fernando Franco Gíraldez
Design for Developer
ffgiraldez
0
48
Arrow Meta 1o1
ffgiraldez
0
45
Don't Fear the Monads
ffgiraldez
1
150
Reactive your Android
ffgiraldez
1
140
Other Decks in Programming
See All in Programming
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
2.5k
dchart: charts from deck markup
ajstarks
3
990
2026年 エンジニアリング自己学習法
yumechi
0
130
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
300
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.3k
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
280
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
CSC307 Lecture 08
javiergs
PRO
0
670
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
Featured
See All Featured
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
180
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Ethics towards AI in product and experience design
skipperchong
2
190
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
66
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.5k
Google's AI Overviews - The New Search
badams
0
910
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
49k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
430
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
76
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Transcript
Intro To Reactive programing
Schedule ▸ What is reactive programming ▸ Core elements of
rx-java ▸ How to test your reactive chains 2
“ The world has move to push; user are waiting
for us to catch up Lee Campbell - Introduction to Rx
1. What is reactive programing A brief description 4
Mixing of ideas Observable Pattern Iterable Pattern FP style 5
What is reactive programing It’s a library for composing asynchronous
and event based programs by using observable sequences 6
2. Core elements 7
Core elements \ concepts ▸ Observable ▸ Operators ▸ Observer
▸ Disposable ▸ Threading 8
Core elements \ events ▸ onNext ▸ onComplete ▸ onError
9
Core elements \ Observable Observable.create { emitter -> try {
if (!emitter.isDisposed) { emitter.onNext("rxjava FTW!") emitter.onNext("functional programing FTW!") emitter.onComplete() } } catch (exception: Exception) { emitter.onError(exception) } } 10
Core elements \ Observable Observable.create { emitter -> val receiver
= object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) = emitter.onNext(intent) } context.registerReceiver(receiver, IntentFilter()) emitter.setCancellable { context.unregisterReceiver(receiver) } } 11
Core elements \ Observable \ Specialization ▸ Observable ▸ Single
▸ Completable ▸ Maybe ▸ Flowable 12
Core elements \ Operators 13
Core elements \ Operators 14 networkRequestSingle.map { response -> response.result.name
}
Core elements \ Operators 15 textWatcherObservable.debounce(400, TimeUnit.MILLISECONDS)
Core elements \ Operators 16 suggestionTextWatcher.debounce(400, TimeUnit.MILLISECONDS) .switchMapSingle { repo.searchSuggestion(it)
}
Core elements \ Operators 17 suggestionTextWatcher.doOnNext { loading.postValue(true) } .switchMapSingle
{ repo.searchSuggestion(it) } .doOnSubscribe { loading.postValue(false) }
Core elements \ Observer val observer = object: Observer<String>{ override
fun onNext(t: String) {} override fun onError(e: Throwable) {} override fun onComplete() {} override fun onSubscribe(d: Disposable) {} } 18
Core elements \ Observer suggestionTextWatcher .switchMapSingle { repo.searchSuggestion(it) } .subscribe(observer)
.subscribe { results.postValue(it) } .subscribe({ results -> }, { throwable -> }) .subscribe({ results -> }, { throwable -> }, {}) .subscribeBy( onNext = { results -> }, onError = { throwable -> }, onComplete = {} ) 19
Core elements \ Disposable val disposable = suggestionTextWatcher .subscribe {
results.postValue(it) } disposable.isDisposed() disposable.dispose() val compositeDisposable = CompositeDisposable() disposable.add(suggestionTextWatcher.subscribe{}) disposable.clear() 20
suggestionTextWatcher.switchMapSingle { repo.searchSuggestion(it) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) Core elements \ Threading
21 To add concurrency into our observable sequence, just indicate to the observable to operate in a particular Scheduler
suggestionTextWatcher.switchMapSingle { repo.searchSuggestion(it) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) Core elements \ Threading
22 Specify the Scheduler on which an Observable will operate.
suggestionTextWatcher.switchMapSingle { repo.searchSuggestion(it) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) Core elements \ Threading
23 Specify the Scheduler on which an Observer will observe this observable.
Testing ▸ How to provide Schedulers? ▸ Make test run
faster ▸ Use black box testing strategies 24
Testing \ Schedulers val testScheduler = TestScheduler() RxJavaPlugins.setIoSchedulerHandler( scheduler ->
testScheduler); RxAndroidPlugins.setMainThreadSchedulerHandler( scheduler -> Schedulers.trampoline()); @field:Rule val testSchedulers = TestSchedulerRule.create(); testScheduler.advanceTimeBy(30, TimeUnit.SECONDS); 25
Testing \ TestObserver Val testObserver = voiceRecognition.observe().test(); testObserver.assertValues(....); testObserver.isTerminated() testObserver.assertSubscribed()
26
27 THANKS! Any questions? @thanerian
[email protected]