还是先看文档上面的
直到有观察者订阅时才创建Observable,并且为每个观察者创建一个新的Observable
Defer
操作符会一直等待直到有观察者订阅它,然后它使用Observable工厂方法生成一个 Observable。它对每个观察者都这样做,因此尽管每个订阅者都以为自己订阅的是同一个 Observable,事实上每个订阅者获取的是它们自己的单独的数据序列。
在某些情况下,等待直到最后一分钟(就是知道订阅发生时)才生成Observable可以确保 Observable包含最新的数据。
Observable<Long> now = Observable.defer(new Func0<Observable<Long>>() {
@Override
public Observable<Long> call() {
return Observable.just(System.currentTimeMillis());
}
});
now.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
log(aLong);
}
});
这个很好理解,因为Observable的call方法是在subscribe时候调用的,所以Observable是最新的