title: Best way to cache data in Android with ViewModel and RxJava2
body: <p>In my application I'm using RxJava2 and new class from Architecture Components ViewModel. In my case, I need to push SQL clause to ViewModel, which will do some magic and return Observable that will give me the data I need. Everything works fine, but I am not sure if I am using RX in the best way. </p>
  
  <p>My data flow:
  ViewModel has PublishSubject on which I am pushing SQL's. ViewModel has also Observable which is created by mapping subject. Also, I used distinctUntilChanged on Subject, to prevent from executing the same query again. 
   To cache data I used replay(1).autoconnect(1) on Observable, but that approach had a flaw. Sometimes my Subject pushed Sql when Observable wasn't yet connect, and my data never arrived to me. Should I use BehaviourSubject? Or maybe I shouldn't use replay(1).autoconnect(1) in the first place? Or maybe my whole flow is wrong? Example:</p>
  
  <pre><code>val listSubject: Subject&lt;RawSql&gt; = PublishSubject.create()
  val sqlListEmitter: Observable&lt;List&lt;T&gt;&gt; =
          listSubject
                  .subscribeOn(Schedulers.computation())
                  .map { // SOME MAGIC HERE }
                  .replay(1).autoConnect(1, { compositeDisposable.add(it) })
  </code></pre>