GitBucket
Toggle navigation
Sign in
Files
Branches
1
Releases
Issues
Pull requests
Labels
Priorities
Milestones
Wiki
Fork
: 0
nitta-lab-2017
/
DevelopRx
Download ZIP
38 commits
Transfer to URL with SHA
branch:
master
Switch branches
×
master
latest commit
b70b1d3db5
KeijuMatsumoto
authored
on 17 Nov 2017
.idea
[add] Project
8 years ago
app
[add] Use throttleFirst operator
8 years ago
gradle/
wrapper
[add] Project
8 years ago
.gitignore
[add] Project
8 years ago
README.md
[update] README.md
8 years ago
build.gradle
[add] RxJava, RxAndroid
8 years ago
gradle.properties
[add] Project
8 years ago
gradlew
[add] Project
8 years ago
gradlew.bat
[add] Project
8 years ago
settings.gradle
[add] Project
8 years ago
README.md
DevelopRx
RxJavaの基本的な構成
RxJavaの基本的な構成は生産者(Flowable/Observable)が消費者(Subscriber/Observer)に購読(subscribe)される形で成り立っている
Flowable/Observable
データを生産し通知するクラス
FlowableとObservableの違いは、Flowableにはバックプレッシャーの機能があり、Observableには無い
Subscriber/Observer
通知されたデータを受け取りそのデータを使った処理を行うインターフェース
Subscriberにはバックプレッシャーの機能があり通知するデータ数をリクエストしないといけないのに対し、Observerはバックプレッシャーの機能が無いため、データ数の制限無しにデータが通知されることがある
Subscription
Reactive Streamsで定義されているインターフェースで通知するデータの数をリクエストするrequestメソッドと処理の途中でも購読を解除するcancelメソッドを持っています
Disposable
購読を解除するためのメソッドを持つインターフェース
ObservableとObserver間の購読の際にonSubscribeメソッド経由で購読を処理の途中でも解除することができます
RxJavaの拡張モジュール
RxAndroid:Androidで使うスレッドを管理するSchedulerを持つ
RxLifecycle:AndroidのActivityやFragmentをRxJavaのFlowableやObservableのライフサイクルと同期する
オペレータ内で生成される非同期のFLowable/Observable
flatMap()
データを受け取ると、新たにFlowable/Observableを生成して実行し、そこで通知されたデータを結果として通知するオペレータ
受け取るデータが連続してくるような場合、生成したFlowable/Observableが同時に実行され、それぞれがデータを通知したタイミングで結果としてデータを通知するので、最終的に通知されるデータは受け取った順に実行されるとは限らない
concatMap()
flatMapと違う点は、受け取るデータが連続してくるような場合、最終的に通知されるデータは順序通り
1つのデータの処理に時間がかかる場合は、処理が終わるまで次のFLowable/Observableを生成しない
concatMapEager()
flatMapと違う点は、受け取るデータが連続してくるような場合、最終的に通知されるデータは順序通り
1つのデータの処理に時間がかかる場合は、全て違うスレッドで実行の後に生成されたデータがバッファされる
リソース管理
using()
Observable.using()
リソースの取得、リソースから取得したデータを使ったFLowable/Observableの生成、リソースの解放を行うインターフェースが用意されている
RxJavaのバックプレッシャー
Flowableにのみ用意されており、Observableにはない
この機能が必要になるケースはFlowableとデータを受け取る側が異なるスレッド上で処理を行い、通知する処理スピードがデータを受け取る側の処理スピードより速い場合
request()
SubscriberがonSubscribe()で受け取るSubscriptionの、Flowableがデータを何件まで通知するかをリクエストするメソッド
1回目はonSubscribe()で通知されるデータ数のリクエストを行い、2回目以降はonNext()で処理を行った後に再度データ数のリクエストを行う
1回目のonSubscribe()でrequest(Long.MAX_VALUE)とした場合は、通知するデータ数の制限がなくなり、生成されたデータは全て通知されるようになるため、onNext()でリクエストは不要となる
observeOn()
scheduler:Scheduler, delayError:boolean, bufferSize:intを設定することが出来る
デフォルトでbufferSizeは128となっているため、バッファされるデータが128個を超えるとMissingBackpressureExceptionが起きる
BackpressureStrategy
Flowableがどのように通知待ちのデータを扱うかのバックプレッシャーの種類
create()でFlowableを生成する際の第2引数にBackpressureStrategyを指定する
種類
BUFFER:通知されるまで、全てのデータをバッファする
DROP:データを通知できるようになるまで、新たに生成されたデータを破棄する
LATEST:生成した最新のデータのみをバッファし、生成される度にバッファするデータを置き換える
通知待ちのデータのバッファサイズを超す場合はMissingBackpressureExceptionのエラーを通知する
特定の処理を行わない。主にonBackpressureで始まるメソッドを使ってバックプレッシャーのモードを設定する場合に使われる
通知する際のルール
nullを通知してはならない
データの通知は行っても行わなくても良い
Flowable/Observableの処理を終了する際は完了かエラーの通知のどちらか一方を行わないといけない。両方を通知することはない
完了かエラーの通知を通知をした後は他の通知を行ってはいけない
通知をする際は1つずつ順番に行い同時に行ってはいけない