2016-06-27 44 views
2

私はObservable(ネットワークからデータを取得する)を持っています。 問題は、観測可能な状態がネットワークの状態によって速くなるか遅くなることです。RxJava観測可能な最小実行時間

observableが実行されているときにprogressウィジェットを表示し、observableが完了したらそれを非表示にします。ネットワークが高速になると、フリッカーが表示され、消えます。観測可能な最小実行時間を1秒に設定したいどうやってやるの?

"遅延"演算子は、遅いネットワークでも遅延するため、オプションではありません。

答えて

4

これにはObservable.zip()を使用できます。

Observable<Response> network = ... 

一つは、使用Observable.concatEager()

Observable<Integer> readyNotification = Observable.just(42).delay(1, TimeUnit.SECONDS); 
Observable delayedNetwork = network.zipWith(readyNotification, 
               (response, notUsed) -> response); 
+1

1)単にタイマーを使わないのはなぜですか? 2)ネットワークがタイムアウトする前に失敗する可能性があることに注意してください。そのタイムアウトが常に使用されるようにするには、 'mergeDelayError'を試してから、' reduce'を使って2つのアイテムを1つに変換してください。 – marwinXXII

+0

2)はネットワーク直後のmaterialize()とzipWith()の後のdematerialize()で解決できます。あなたが元の質問をコメントしたり、別の答えとして追加することができます –

+0

'mergeWithDelay'は、あるシーケンスが壊れた場合、別のシーケンスが正常に完了するか、エラーを返すか、早期に取り消されないことを保証します(mergeDelayError() 。著者がどのような質問を実装したいかによって異なります。 – marwinXXII

0

を行うことができます

を考えるとそれはあなたが別の(CONCAT演算子)の後に完了するために、一つのストリームを強制することを可能にするだけでなく、なくても、すぐにネットワーク要求をキックオフ最初の引数が観測可能になるのを待つ(concatEager):

関連する問題