由于斯维亚托斯Lebeckiy了在Android的美国时差通道谁指出,BehaviorSubject
和BehaviorProcessor
我,提出了关于如何解决此问题的想法。
我将视图模型更改为:
class Testviewmodel extends viewmodel {
private LiveData<String> countdown;
LiveData<String> getCountdown() {
if (countdown == null) {
countdown = LiveDataReactiveStreams.fromPublisher(startCountdown());
}
return countdown;
}
private static Flowable<String> startCountdown() {
final BehaviorProcessor<String> processor = BehaviorProcessor.create();
Flowable.concat(
Flowable.just("Falcon Heavy rocket will launch in..."),
Flowable.intervalRange(0, 10, 3, 1, TimeUnit.SECONDS)
.map(x -> String.valueOf(10 - x)),
Flowable.timer(1, TimeUnit.SECONDS)
.map(ignored -> "Lift off!")
).subscribe(processor);
return processor;
}
}
这样,我只能倒数一次开始计时,getCountdown
并且BehaviorProcessor
创建时startCountdown
负责将最后一个随后发出的值传递给其订户(LiveData
在这种情况下)。
由于LiveDataReactiveStreams
需要a Flowable
,因此使用aBehaviorProcessor
代替BehaviorSubject
此处很方便。