私はObservable
毎秒ティックを発する を持っています:
Observable.interval(0, 1, TimeUnit.SECONDS)
.take(durationInSeconds + 1));
この Observable を一時停止して数値の発行を停止し、必要に応じて再開したいと思います。
いくつかの落とし穴があります:
Observable
Javadoc によると、interval
オペレーターはバックプレッシャーをサポートしていません- backpressure に関するRxJava wiki には、 backpressureのフロー制御の代替手段としての Callstack ブロッキングに関するセクションがあります。
生産性の高い Observable を処理するもう 1 つの方法は、コールスタックをブロックすることです (生産性の高い Observable を管理するスレッドを停止します)。これには、Rx の「リアクティブ」でノンブロッキング モデルに反するという欠点があります。ただし、問題のある Observable が安全にブロックできるスレッド上にある場合、これは実行可能なオプションになる可能性があります。現在、RxJava はこれを容易にするためのオペレーターを公開していません。
interval
Observableを一時停止する方法はありますか? または、バックプレッシャーをサポートする独自の「刻む」Observableを実装する必要がありますか?