我想到了以下场景:我希望有一个计时器计数直到我取消订阅,但我想在我以最后一个值停止时获得 onComplete 信号。
observable = Observable.interval(1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(new Action1<Long>() {
@Override
public void call(Long aLong) {
String duration = Utils.getDuration(startedTrackingTime, new Date().getTime());
view.updateDurationTextView(duration);
}
});
subscription = observable.subscribe();
public void stopMission() {
observable.doOnCompleted(new Action0() {
@Override
public void call() {
Log.d(TAG, "onCompleted: " + "timer");
}
});
subscription.unsubscribe();
doOnComplete 从未调用过。有可能用 RxJava 做到吗?我觉得我做错了什么?
最佳答案
@MatBos 是正确的,如果您取消订阅,您就不能期望完成发射。但是,如果您想尽早停止 observable 并让它完成,您可以将间隔与 PublishSubject
合并,并在您需要时通过主题发送停止消息:
PublishSubject<Long> subject = PublishSubject.create();
subject
.mergeWith(Observable.interval(1, TimeUnit.SECONDS))
.takeWhile(n -> n != -1)
.doOnNext(System.out::println)
.doOnCompleted(() -> System.out.println("completed"))
.subscribe();
Thread.sleep(3100);
subject.onNext(-1L);
Thread.sleep(2000);
给予:
0
1
2
completed
关于android - 停止 Observable.interval 并发送 onComplete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230530/