Observable.defer vs Observable.just

时间:2017-12-28 05:15:47

标签: rx-java

http://blog.danlew.net/2015/07/23/deferring-observable-code-until-subscription-in-rxjava/讨论了使用Observable.just,Observable.create和Observable.defer创建observable的方法

我们说我有这个:

List<File> fileIOFunction() {
    // does some file io operations
}

OBSERVABLE.subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())

如果OBSERVABLE为:

,则运行文件io操作的线程是什么
Observable.create(
                new Observable.OnSubscribe<List<File>>() {
                    @Override
                    public void call(Subscriber<? super List<File>> 
                                     subscriber) {
                        subscriber.onNext(fileIOFunction());
                 }

如果OBSERVABLE是Observable.just(fileIOFunction())

如果OBSERVABLE

Observable.defer(new Func0<Observable<List<File>>>() {
                @Override
                public Observable<List<File>> call() { 
                    return Observable.just(fileIOFunction());
                });

1 个答案:

答案 0 :(得分:1)

对于只是它将在调用线程上运行,因为将急切地调用fileIOFunction()。由于 subscribeOn ,Defer和Create将在Schedulers.io()上运行,并且由于 observeOn (切换线程)将切换到AndroidSchedulers.mainThread()。创建和推迟是懒惰的。