新しいバージョンではグローバルな変更はありませんが、Java 8のサポートが表示され、ライブラリがより使いやすくなっていることに注意してください。
免責事項:この記事はGitHubレビューに基づいています。さらに、モバイルデベロッパーのRxJava 3に対する印象を共有しますが、徹底的に調査するつもりはありません。新しいバージョンが最近リリースされており、まだ実用的な経験はあまりないためです。何か追加がある場合は、コメントに書き込んでください、私たちは議論させていただきます)
RxJava 3の主な変更点
RxJava 3 に表示される内容は次のとおりです。
- Javaベースバージョンが8 *に増加しました。
- 次のような言語機能がサポートされています。
-ストリーム
-ストリームコレクタ
-オプション
-CompletableFeature
* Java8 APIを使用するには、minSDKをバージョン24に上げる必要があります。
次に、開発者は次のような機能のサポートを削除しました。
- java.time.Duration-多くのオーバーロードを生成し、常に時間+単位で置き換えることができます。
- java.util.function-例外をスローできず、オーバーロードにより不要な「あいまいさ」が生じる可能性があります。
パッケージ構造も変更されました:
表示される変更は2つのグループに分けることができます:
- 行動の変化
- APIの変更
行動の変化
- すべてのエラーが処理されます
以前は、RxJava 2の問題の1つは、場合によってはエラーが失われ、処理できないことがありました。RxJava 3では、エラーをスローする可能性のあるソースから登録解除すると、RxJavaPlugins.onError()を介してこのエラーが一般エラーハンドラーにスローされます。
- Connectable.reset()
RxJava 2に温泉の問題がありました。ConnectableObservableターミナルイベントを受信すると、新しい接続はすべてのアイテムを無視し、終了イベントのみを受信しました。
RxJava 3には、reset()関数を使用してConnectableObservable状態をリセットし、新しく接続されたサブスクライバーがデータを処理できるようにする関数が導入されています。
- Flowable.publishを一時停止する機能
RxJava 3では、特定の数の値が受信された後、Flowable.publishが一時停止され、残りの要素は後続のサブスクライバーが使用できます。
- Processor.offer()nullパラメータ
PublishProcessor.offer()、BehaviourProcessor.offer()、またはMulticastProcessor.offer()を呼び出してnullを渡そうとすると、onErrorハンドラーにエラーを渡す代わりにNullPointerExceptionがスローされ、最終状態がトリガーされます。
- CompositeException.getCause()
RxJava 2の以前のバージョンでは、getCause()メソッドはかなりのメモリ負荷であり、各例外でinitCauseメソッドを呼び出すことが不安定で、常に例外チェーンをスローしませんでした。
新しいバージョンでは、このメソッドは内部から変更され、文字列の単純なフォーマットにより、スタックトレースの形式で一連のエラーを生成します。
- 変更されたパラメーター検証例外
パラメーターが無効な場合、一部のオペレーターはIndexOutOfBoundsExceptionではなくIllegalArgumentExceptionをスロー
するようになりました
。- スキップ- スキップラスト
-テイクラスト
-テイクラストタイムド
- fromXの事前クローズソース()
fromAction()およびfromRunnable()ライブラリは、残りのfromX()呼び出しと整合性が取れています。fromRunnable()およびfromAction()コールバックは、適宜呼び出されるとすぐに閉じられるようになりました。RxJava 2では、これらの演算子は、パラメーターに渡されたラムダの本体の実行の終了後に閉じられました。
- ()を使用してリソースをクリーンアップする順序
using()ステートメントには、使用されたリソースをいつクリーンアップするかを担当するパラメーターがあります(true-完了前、false-後)。ライブラリの初期バージョンでは、このパラメーターは無視され、リソースは常に最終状態になる前にクリーンアップされていましたが、RxJava 3ではすべてが正しく機能していました。
APIの変更
- 新しいバージョンのライブラリの機能インターフェイスの例外処理が、例外からスロー可能に拡張されました
- 新しいタイプ:サプライヤー
RxJava 3では、機能インターフェースの例外がExceptionからThrowableに拡張されたため、新しいサプライヤータイプが導入されました。Callableに類似していますが、throws Throwable
- RxJava 3では、あるデータソースを別のデータソースに変換するための演算子が特定のコンバーターに変更されました
- 移動したコンポーネント
RxJava3がJava8 APIをサポートするという事実により、個々のファクトリクラスを置き換える新しいソリューションが登場しました。これらのファクトリのメソッドは、Disposableインターフェース自体の静的メソッドになりました。
以前と同じように:
今:
- 警告を減らすために、CompositeDisposable内で使用されたDisposableContainerクラスは、パブリックAPIの一部になります
- RxJava 2の一部の演算子は実験段階にあり、3番目のバージョンでは標準演算子になりました。
Flowable promotions
dematerialize(Function)
Observable promotions
dematerialize(Function)
Maybe promotions
doOnTerminate(Action)
materialize()
Single promotions
dematerialize(Function)
materialize()
Complectable promotions
delaySubscription(long, TimeUnit)
delaySubscription(long, TimeUnit, Scheduler)
materialize()
- concatMap() Scheduler’
- blockingSubscribe() Maybe, Single Completable
- onErrorComplete()
- onErrorResumeWith() Completable
- retryUntil() Single Completable
- switchOnNext() switchOnNextDelayError() Maybe, Single Completable
- dematerialize() Maybe
- fromX()-
- timeInterval() Maybe Single
- toFuture() Maybe Completable
- ofType() Maybe Single
- doOnLifecycle() Maybe, Single Completable
- concatMapX() (X – ) Maybe Single
- concatDelayError() Maybe, Single Completable
- mergeArray() Single
Flowable
startWith(MaybeSource)
startWith(SingleSource)
startWith(ComplectableSource)
Observable
startWith(MaybeSource)
startWith(SingleSource)
startWith(ComplectableSource)
Maybe
startWith(Publisher)
startWith(ObservableSource)
startWith(MaybeSource)
startWith(SingleSource)
startWith(ComplectableSource)
Single
startWith(Publisher)
startWith(ObservableSource)
startWith(MaybeSource)
startWith(SingleSource)
startWith(ComplectableSource)
Complectable
startWith(MaybeSource)
startWith(SingleSource)
- onErrorReturn() Completable
- safeSubscribe() Maybe, Single Completable
- flatMap() Single
- concatEager() concatEagerDelayError() Flowable, Observable, Maybe Single
- fromSupplier()
Java8
new演算子を追加しましたfromOptional()観測可能フロアブル、および多分用
を追加しましたnew演算子FROMSTREAM()フロアブルと観測可能なため
追加new演算子fromCompletionStageを()すべての5つのデータ・ソース・タイプのため
の新しい演算子を追加しました)mapOptional(たぶんフロアブル、観察可能な、およびシングルのために。空でない値のみを渡すことができるFlowableおよびObservableの
新しいblockingStream()演算子が追加されました。演算子はデータストリームをストリームとして表しますが、すべての種類のリークを防ぐために、作業の完了時にストリームを閉じることをお勧めします。
新しい演算子flatMapStream()とFlowableおよびObservableのconcatMapStream() -各項目を個別のストリームに変換できるようにするMaybeの
新しい演算子flattenStreamAsFlowable()およびflattenStreamAsObservable()と、ObservableおよびFlowableの同等のflatMapStream()演算子を追加
名前が変更されたもの
- startWith()- startWithArray()、startWithIterable()、startWithItem()の代わりに
- onErrorResumeNext()の代わりに-onErrorResumeWith ()
- zipIterable()- zip()の代わり
- CombineLatest()の代わりに(配列引数を使用)-CombineLatestArray()、CombineLatestArrayDelayError()
- Single.equals()の代わりに-sequenceEqual(SingleSource、SingleSource)
- Maybe.flatMapSingleElement() – Maybe.flatMapSingle()
- Callable – Supplier ( )
API
Maybe.toSingle()、replacement- Maybe.defaultIfEmpty()
subscribe(...、...、...、)、replacement- doOnSubscribe()
Single.toCompletable()、replacement- Single.ignoreElement()
Completable.blockingGet()、replacement- Completable .blockingAwait()
、(スケジューラ)リプレイ置き換える- observeOn(スケジューラ)
マテリアライゼーション解除()、置き換える- デシリアライズ(機能)
)(onExceptionResumeNext、交換してください- onErrorResumeNext(機能)
(可変引数パラメータ付き)combineLatest()は、交換してください- combineLatestArrayを()
fromFuture()(スケジューラのパラメータを有する)、置換- subscribeOn()
concatMapIterable()(バッファ・パラメータを有する)、置換- concatMapIterable(機能)
また、TestSubscriberとTestObserverから次のメソッドを削除しました。
移行する方法
多くの開発者は、RxJava 2からRxJava 3への移行はかなり面倒なプロセスであると指摘しています。移行を行うには2つのオプションがあります。
- プロジェクトに両方のバージョンのライブラリがあること。
- RxJava 3への完全な移行を実行しながら、特別なライブラリを使用できます。
移行する方法:
- APIで作業を更新するには-変更される可能性のあるRxJava 2メソッドの類似体を使用します。
- 一部のサードパーティライブラリはまだRxJava 2に「座っている」ことを覚えておくことが重要です。移行を簡単にするために、RxJavaBridgeを使用できます。これにより、ほとんどの移行が内部で隠されます。
- Retrofit RxJava3CallAdapterFactory .
RxJava 3の新機能を確認しました。次に、主な質問に答えてみましょう。移行する価値はありますか?
RxJava 3は実質的にAPIの改善です。根本的な変更はなかったため、通常は現在最新バージョンに移行する必要はありません。移行自体には労力が必要ですが、多くのサードパーティライブラリがまだRxJava 2に関連付けられており、Java8で動作するようにするには、minSDKをバージョン24に上げる必要があります。一部のチームは、Kotlinコルーチンの使用などの代替ソリューションも提供しています。
ただし、RxJava 2が「メンテナンス」モードになったことは注目に値します。つまり、更新によるバグ修正のみが行われます。 2番目のバージョンのサポートは、2021年2月28日に終了する予定です。
! , .