RxJava 创建操作符 defer

来源:互联网 发布:爱知中学录取分数线 编辑:程序博客网 时间:2024/04/29 15:25

defer的英文意思就是推迟,在这里是推迟Observable的创建,defer操作符是直到有订阅者订阅时,才通过Observable的工厂方法创建Observable,defer能保证Observable的状态是最新的:

 value = 1;        Observable justObservable = Observable.just(value);        Observable deferObservable = Observable.defer(new Func0<Observable<Integer>>() {            @Override            public Observable<Integer> call() {                return Observable.just(value);            }        });        value = 2;        justObservable.subscribe(new Action1() {            @Override            public void call(Object o) {                LogUtils.d("------>justObservable:"+o);            }        });        deferObservable.subscribe(new Action1() {            @Override            public void call(Object o) {                LogUtils.d("------>deferObservable:"+o);            }        });

结果为:

02-19 16:49:45.093 10258-10258/com.rxandroid.test1 D/----->: ------>justObservable:1
02-19 16:49:45.093 10258-10258/com.rxandroid.test1 D/----->: ------>deferObservable:2


defer操作符也是由create操作符创建的:源码:

public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory) {    return create(new OnSubscribeDefer<T>(observableFactory));}

1 0