这一节我们讲RxJava的应用场景,并通过一个demo来演示这种使用场景。
RxJava最常见的使用场景之一,是在后台线程中运行一些耗时的操作,比如复杂计算、网络请求等,并把它们运行的最终结果或者错误显示在UI线程上。
下面的demo展示了这种应用场景:
import io.reactivex.schedulers.Schedulers;
Flowable.fromCallable(() -> {
Thread.sleep(1000); // 模拟耗时计算
return "Done";
})
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.single())
.subscribe(System.out::println, Throwable::printStackTrace);
Thread.sleep(2000); // <--- 等待上面的Flowable运行完毕
上面的这种链式风格的方法,叫做fluent api,类似build设计模式。然而,RxJava的Reactive类型是不可变的,这就意味着,每个方法都返回了一个新的Flowable,新的Flowable增加了新的行为。为了说明这个问题,这个demo可以重写为下面这样:
Flowable<String> source = Flowable.fromCallable(() -> {
Thread.sleep(1000); // 模拟耗时计算
return "Done";
});
Flowable<String> runBackground = source.subscribeOn(Schedulers.io());
Flowable<String> showForeground = runBackground.observeOn(Schedulers.single());
showForeground.subscribe(System.out::println, Throwable::printStackTrace);
Thread.sleep(2000);
本节先讲到这里,下一节将详细讲解这个demo。