2017-12-28 18 views
0

http://blog.danlew.net/2015/07/23/deferring-observable-code-until-subscription-in-rxjava/説明し、Observable.deferObservable.defer Observable.just

のは、私はこれを持っているとしましょう:

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

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

ファイルIOを何スレッド

Observable.create(
       new Observable.OnSubscribe<List<File>>() { 
        @Override 
        public void call(Subscriber<? super List<File>> 
            subscriber) { 
         subscriber.onNext(fileIOFunction()); 
       } 

観察できるがObservable.just(fileIOFunction())

の場合:観測可能である場合、操作は上の実行しますfileIOFunction()が熱心に呼び出されるので、

観察可能な場合には、ためだけそれがスレッドを呼び出すことで実行されます

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

'System.out.println(Thread.currentThread())'を 'fileIOFunction()'に追加するだけで、両方の場合を実装して実行することができます。 – akarnokd

+0

ありがとう!私はThread.currentThread()について知らなかった。どのスレッドを出力するにはgetName()をアタッチします。 – Marc

答えて

0

です。 DeferとCreateはsubscribeOnのためにSchedulers.io()で実行され、observeOn(スイッチスレッド)によってAndroidSchedulers.mainThread()に切り替わります。作成と遅延は怠惰です。

関連する問題