Dagger 2 test application
Not sure why you complicated it, a simple set of operators could do the same:

Observable&lt;SlowComponent&gt; mSlowComponent;

SerialDisposable mDisposable;

@Override
public void onCreate() {
    super.onCreate();

    mDisposable = new SerialDisposable();

    mSlowComponent = Observable.fromCallable(() -&gt; 
        DaggerSlowComponent.builder()
        .contextModule(new ContextModule(this))
        .build()
    )
    .subscribeOn(Schedulers.io())
    .replay(1)
    .autoConnect(0, mDisposable::set);
}

@Override
public void onDestroy() {
    super.onDestroy();
    mDisposable.dispose();
    mSlowComponent = null;
}


Main points:


Use fromCallable for a single element result
replay(1) will keep replaying a that single result
autoConnect(0) will start the sequence immediately, even without subscribers yet
mDisposable will allow the sequence to be cancelled if the activity gets disposed while the slow component is still being created.


Edit: 

I almost forgot, SequentialDisposable is internal to RxJava, the public version is SerialDisposable.