我正在尝试使用改进实现分页,但我很难找到如何暂停一个observable,以便它不会继续请求不需要的页面。
基本问题是:我可以告诉可观察的来源"暂停"和"恢复"?我不是在谈论缓冲或跳过,而是我希望源可观察到完全停止,即:不要发出任何网络请求等。
以下是我正在使用的一些模拟代码。 rangeObservable是模拟的webserver" pager",而timerObservable就像接收滚动事件一样。
package example.wanna.be.pausable;
import java.io.IOException;
import java.lang.Throwable;
import java.util.concurrent.TimeUnit;
import rx.Observable;
import rx.observables.ConnectableObservable;
import rx.Subscription;
import rx.Subscriber;
public class Main {
private static ConnectableObservable rangeObservable;
private static void setPaused(boolean paused) {
// How do I pause/resume rangeObservable?
}
public static void main(String[] args) {
rangeObservable = Observable.range(0, Integer.MAX_VALUE).publish();
Observable timerObservable = Observable.timer(2, 2, TimeUnit.SECONDS);
rangeObservable.subscribe(new Subscriber<Integer>() {
private int count = 0;
public void onStart() {
System.out.println("Range started");
}
public void onNext(Integer i) {
System.out.println("Range: " + i);
if (++count % 20 == 0) {
System.out.println("Pausing");
setPaused(true);
}
}
public void onError(Throwable e) {
e.printStackTrace();
}
public void onCompleted() {
System.out.println("Range done");
}
});
timerObservable.subscribe(new Subscriber<Long>() {
public void onStart() {
System.out.println("Time started");
// I dont know where to put this
// rangeObservable.connect();
}
public void onNext(Long i) {
System.out.println("Timer: " + i);
setPaused(false);
}
public void onError(Throwable e) {
e.printStackTrace();
}
public void onCompleted() {
System.out.println("Timer done");
}
});
// for some reason I have to do this or it just exits immediately
try {
System.in.read();
} catch(IOException e) {
e.printStackTrace();
}
}
}
感谢任何指导!