【发布时间】:2019-09-15 02:59:02
【问题描述】:
我正在使用RxJava 和JavaFx,我不禁注意到性能不佳,每当我单击执行task 的button 时,button 一直突出显示直到方法完成,应用程序的行为就像它在 UI 线程上运行该方法一样。当我用普通的 Java thread 替换相同的 Rx 调用时,我注意到性能要好得多,按钮突出显示不会保持不变,并且整体应用程序转换看起来要好得多。以下是我的Rx 通话示例
Single.just(someMethod())
.observeOn(JavaFxScheduler.platform())
.subscribeOn(Schedulers.io())
.subscribe(new DisposableSingleObserver<>() {
@Override
public void onSuccess(Result result) {
//get my result
this.dispose();
}
@Override
public void onError(Throwable throwable) {
logger.error(throwable);
this.dispose();
}
});
我在Android 中使用RxJava,与此相比,它的表现非常好。谁有解决办法?
【问题讨论】:
-
您正在调用
Single.just(someMethod()),这意味着在调用Single.just之前评估someMethod()的结果。换句话说,结果被急切地评估(在任何创建Single的线程上)。您应该使用Single的一种方法,使值的评估变得惰性(例如Single.fromCallable或其他东西——对 RxJava 不太熟悉)。 -
@Slaw 很有趣,我从来不知道。
-
注意这不是 RxJava 特有的。您将方法调用的结果作为参数传递给另一个方法。这需要在第二种方法之前评估第一种方法,否则您没有结果可以作为参数传递。
标签: java javafx rx-java java-11