Defer操作符的作用


Defer操作符接受一个可观察对象的工厂作为参数,工厂会为每个订阅的观察者生成一个Observable。对于观察者来说,订阅的Observable对象的特性完全取决于工厂内部的逻辑。

在某些场景下,等待持续到最后时刻才发生订阅,这样生成Observable可以确保数据是最新的。
image.png

示例代码

RxJava版本:2.2.19

  1. Observable.defer(new Callable<ObservableSource<String>>() {
  2. @Override
  3. public ObservableSource<String> call() {
  4. //每次被订阅时在此处生成Observable
  5. return null;
  6. }
  7. }).subscribe(new Observer<String>() {
  8. @Override
  9. public void onSubscribe(Disposable d) {}
  10. @Override
  11. public void onNext(String s) {}
  12. @Override
  13. public void onError(Throwable e) {}
  14. @Override
  15. public void onComplete() {}
  16. });

参考资料

http://reactivex.io/documentation/operators/defer.html