こんにちは、私はrxjava2
について基本的には非同期操作用です。私はそれがアンドロイドのAsyncTask
でないオペレータのコンセプトを持っていることがわかりました。RxJava2の優位性AsyncTask
他の方法はrxjava2
はAsyncTask
とは異なりますか?
こんにちは、私はrxjava2
について基本的には非同期操作用です。私はそれがアンドロイドのAsyncTask
でないオペレータのコンセプトを持っていることがわかりました。RxJava2の優位性AsyncTask
他の方法はrxjava2
はAsyncTask
とは異なりますか?
RxJavaは「基本的に非同期操作」ではありません。それはそれのただ一つの側面です。
asyncTask
を使用していくつかの操作を実行できます。Flowable
チェーンを使用していくつかのアプリケーションのバックプレッシャ要件を管理しますが、Observable
チェーンはバックプレッシャ要件がありません。前者は、バッファリングが必要な場合、または削除された情報の明示的な確認が必要な場合に適しています。asyncTask
は、非同期タスクを処理するだけです。
'AsyncTask'はAndroidのコンストラクトですが、RxJavaは純粋なJavaであり、OPのオリジナルの品質を向上させるわけではありません。 –
AsyncTask
はUIをブロックせずにUI画面のコンテキストで簡単なロングラン実行作業を行う開発者のためのAndroidのデフォルトツールです。
AsyncTaskの主な問題は、次のとおりです。
複数のWebサービスが CALLS:
、私たちの活動/フラグメントにおけるインナーAsyncTaskのサブクラスを作成AsyncTask
でこれを解決するためにネットワーク操作を実行しますバックグラウンドを作成し、その操作の結果を取得して、メインスレッドのUIを更新します。
このアプローチは、いくつかの問題と制限事項があります。
をメモリ/コンテキストはが簡単に作成されている漏れた内部クラスであるため、また、外部クラスへの暗黙的な参照を保持し、我々は別の長い操作チェーンにしたい場合はどのようなネットワークコール後?私たちは2つのAsyncTasksをネストしなければなりません。
何かがうまくいかない場合はどうなりエラー処理
?残念なことに、このためのすぐれたソリューションはありません。 また、デバイスの回転、バックプレスのハンドルなどのような他の問題で解決し、このすべての問題を見に
RxJava
RxJavaを使用してエラー処理は、このようなものです:
webService.doSomething(someData)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
result -> resultText.setText("It worked!"),
e -> handleError(e));
第二に、複数のWebサービスの呼び出しで。
public Observable<List<Weather>> getWeatherForLargeUsCapitals() {
return cityDirectory.getUsCapitals()
.flatMap(cityList -> Observable.from(cityList))
.filter(city -> city.getPopulation() > 500,000)
.flatMap(city -> weatherService.getCurrentWeather(city)) //each runs in parallel
.toSortedList((cw1,cw2) -> cw1.getCityName().compare(cw2.getCityName()));
}
これがあなたを助けてくれることを願っています!
「デバイス回転、バックプレスハンドルなど」とはどういう意味ですか? - Asyntaskはrxjavaを実行し続けますか? –
RxLifecycleライブラリを使用する場合、.compose(bindToLifecycle())はライフサイクルコールバックを処理します。 –
'.compose(bindToLifecycle())'は何をしますか?それは回転とバックプレスでキャンセルされますか? –
@VygintasBサブスクリプションを適切に処理しないと、メモリリークが発生し、そうでないと誤解する可能性があり、誤った比較が行われる可能性があります。 –
私はOPの答えをdownvotingでポイントが表示されません。 @ BobDalgeishの答えは、初心者の混乱を和らげるためにアップをするべきです。 – Solidak