Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between Observable.create() and Observable.fromCallable()

Suppose we are getting a generic Object from SharedPrefs using .create():

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

and using .fromCallable():

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

Is there any Difference if we call onComplete() immediately after first emmit from Observable.create() and using Observable.fromCallable()? If so, what are the pros/cons?

like image 920
hrskrs Avatar asked May 04 '17 14:05

hrskrs


1 Answers

Observable.create let's you emit multiple items while fromCallable emits only a single item.

You should use the latter as it is more expressive about the intent of having a single element sequence and has a slighly lower overhead.

Drawback is that you can't have an async single element source with it whereas create let's you delay the call to onNext to a later point in time.

like image 54
akarnokd Avatar answered Nov 20 '22 13:11

akarnokd