web-dev-qa-db-ja.com

Observable.create()とObservable.fromCallable()の違い

.create()を使用してObjectから汎用のSharedPrefsを取得するとします。

_return Observable.create(subscriber -> {
      String json = sharedPreferences.getString(key, "");
      T myClass = gson.fromJson(json, generic);
      subscriber.onNext(myClass);
      subscriber.onComplete();
    });
_

.fromCallable()の使用:

_return Observable.fromCallable(() -> {
      String json = sharedPreferences.getString(key, "");
      return gson.fromJson(json, generic);
    });
_

onComplete()から最初に送信した直後にObservable.create()を呼び出してObservable.fromCallable()を使用した場合、違いはありますか?もしそうなら、_pros/cons_は何ですか?

9
hrskrs

Observable.createは複数のアイテムを放出し、fromCallableは単一のアイテムのみを放出します。

後者を使用する必要があります。これは、単一の要素シーケンスを持つ意図についてより表現力があり、オーバーヘッドがわずかに低いためです。

欠点は、非同期の単一要素ソースを使用できないことですが、createでは、onNextへの呼び出しを後で遅らせることができます。

14
akarnokd