3 回答
TA贡献1799条经验 获得超8个赞
由于 RxJava 是异步的,observable 下面的 java 代码将运行,而 observable 将在不同的线程中运行,这就是为什么如果您想在 Flowable 已完成发送数据时收到通知,您应该在 RxJava 流中执行此操作。为此,您有一个运算符 .doOnComplete 这里有一个示例如何检测流何时完成
Flowable.range(0, 100).parallel()
.runOn(Schedulers.computation())
.map(integer -> {
return integer;
})
.sequential()
.doOnComplete(() -> {
System.out.println("finished");
})
.subscribe(integer -> System.out.println(integer));
TA贡献1863条经验 获得超2个赞
您可以使用 AtomicBoolean,将其初始化为 false 并使用 将其设置为 true doFinally()。
doFinally()在 Observable 发出 onError 或 onCompleted 信号后调用,或者被下游处理。
然后让主线程休眠,直到completedvalue 为 true。
使用你的例子:
AtomicBoolean completed = new AtomicBoolean(false);
myFlowable.parallel()
.runOn(Schedulers.computation())
.map(val -> myCollection.add(val))
.sequential()
.doFinally(() -> completed.set(true))
.subscribe(val -> {
...
});
...
try {
while(!completed.get()){
Thread.sleep(1000);
...
}
...
} catch (InterruptedException e) {
e.printStackTrace();
}
添加回答
举报