私はRxJavaを学んでいて、RxJavaの仕組みについての私の誤解であることは間違いありません。私は単純なObservable
とConsumer
のペアを示す2つのコードブロックを持っています。Observable
は1から4までの整数の計数ストリームをそれぞれ1秒遅らせて出力します。RxJava:単純な非同期操作の違いを理解する
スニペットA - UIの凍結
Observable<Integer> observable = Observable.create(e -> {
e.onNext(1);
Thread.sleep(1000);
e.onNext(2);
Thread.sleep(1000);
e.onNext(3);
Thread.sleep(1000);
e.onNext(4);
Thread.sleep(1000);
e.onComplete();
});
observable.subscribeOn(Schedulers.io());
observable.observeOn(AndroidSchedulers.mainThread());
observable.subscribe(i -> Log.e(TAG, "onNext: " + i));
スニペットB原因 - スニペットAは私のUIが、スニペットを凍結しない理由私は理解していない問題がある正しく
Observable.create(e -> {
e.onNext(1);
Thread.sleep(1000);
e.onNext(2);
Thread.sleep(1000);
e.onNext(3);
Thread.sleep(1000);
e.onNext(4);
Thread.sleep(1000);
e.onComplete();
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(i -> Log.e(TAG, "onNext: " + i));
に動作しますBは期待どおりに動作し、バックグラウンドで動作します。このコードはButton
のonClick
から実行され、スニペットBが完全に正常に動作している間にリップルアニメーションが停止するため、スニペットAはUIをフリーズさせることができます。
質問:Observable
のインスタンス/ポインタを作成し、Observable
を初期化するためにビルダーのパラダイムを使用しての違いは何ですか?上記の2つのコードスニペットが実際に異なるのはなぜですか?
、私は簡潔なコードで約求めている明確な質問や問題がないのですか? – Brian