2016-03-30 10 views

答えて

7

を作成いただきありがとうございます。 ..)はObservableを実際に作成します。

public final static <T> Observable<T> create(OnSubscribe<T> f) { 
     return new Observable<T>(hook.onCreate(f)); 
    } 

延期(...)観測可能(件名などを...)を返すファクトリ関数を受け入れ、OnSubscribeDeferでそれをラップし、すべての加入者のための新たな観測可能な観測可能な場合にのみ、加入者が加入し、作成します。

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

いくつかの詳細にhere

7

を参照してくださいので、区別があるように思わ:あなたは/がすでに観測可能を返す作成何かを持っているときdeferは良いですが、あなたが起こることをそのプロセスにそれをしたくありませんサブスクリプションまで。

createは、手動で非同期処理をラップしてオブザーバブルを作成する必要がある場合に適しています。その作成はでもまで延期されています。

deferが観測系列の繰延構成を可能に演算子である:

は、別の言い方をします。

createは、観察可能なシーケンス(作成がサブスクリプションまで延期される)のカスタム実装です。

だから、あなたはいくつかの結果/値からObservableを作成するためにjustを使用する可能性がある状況を持っているか、リクエストのObservableを返したネットワークAPI層を持っている、しかし、あなたはその要求をキックオフしたくない場合サブスクリプションまで。 deferはこれらのシナリオに適しています。

あなたはがリクエストに対してObservableを返しますが、これはあなたが、あなたがcreateを使用する可能性がありますするObservableインタフェースを必要としないことをネットワークAPI層を持っている場合。そのObservableシーケンスはまだサブスクリプションまで作成されませんでした。サブスクリプションに関係なくそのネットワークコールを開始したい場合は、Subjectのような別のメカニズムを使用して、そのリプレイを行うことができます。

関連する問題