src/main/java/io/reactivex/Observable.java
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.CUSTOM)
    public final Observable<T> observeOn(Scheduler scheduler) {
        return observeOn(scheduler, false, bufferSize());
    }
@CheckReturnValue
    @SchedulerSupport(SchedulerSupport.CUSTOM)
    public final Observable<T> observeOn(Scheduler scheduler) {
        return observeOn(scheduler, false, bufferSize());
    }
Modifies an ObservableSource to perform its emissions and notifications on a specified {@link Scheduler},
asynchronously with an unbounded buffer with {@link Flowable#bufferSize()} "island size".

<p>Note that onError notifications will cut ahead of onNext notifications on the emission thread if Scheduler is truly
asynchronous. If strict event ordering is required, consider using the {@link #observeOn(Scheduler, boolean)} overload.
<p>
<img width="640" height="308" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/observeOn.png" alt="">
<dl>
<dt><b>Scheduler:</b></dt>
<dd>You specify which {@link Scheduler} this operator will use.</dd>
</dl>
<p>"Island size" indicates how large chunks the unbounded buffer allocates to store the excess elements waiting to be consumed
on the other side of the asynchronous boundary.

@param scheduler
the {@link Scheduler} to notify {@link Observer}s on
@return the source ObservableSource modified so that its {@link Observer}s are notified on the specified
{@link Scheduler}
@see <a href="http://reactivex.io/documentation/operators/observeon.html">ReactiveX operators documentation: ObserveOn</a>
@see <a href="http://www.grahamlea.com/2014/07/rxjava-threading-examples/">RxJava Threading Examples</a>
@see #subscribeOn
@see #observeOn(Scheduler, boolean)
@see #observeOn(Scheduler, boolean, int)