2017-12-12 7 views
0

내 응용 프로그램에서 응용 프로그램을 시작하자마자 많은 양의 데이터를로드해야합니다. 또한 일부 조각/활동에서 데이터가로드 된 경우 이벤트를 수신해야합니다.ConnectableObservable을 사용하여 프리 페치 한 다음 다른 가입자가 처리 한 데이터를 사용하는 방법

나는 그 목적으로 RxJava ConnectableObservable을 사용하고 있습니다. 여러 가입자에게 동일한 데이터가 필요하므로 replay()을 사용했습니다.

Psudo 코드 : 지금은 데이터 프리 페치하려면

Observable.create(emitter -> { 
      try { 
       Data next = getDataFromDb(); 
       emitter.onNext(next); 
       emitter.onCompleted(); 
      } catch (SQLiteException e) { 
       emitter.onError(e); 
      } 
     }, Emitter.BackpressureMode.BUFFER) 
     .toList() 
     .compose(applySchedulers()) 
     .replay() 

, I 응용 프로그램 클래스의 subscribe 다음 활동에서이/조각은 connect()를 사용해야합니까?

답변

2

이 시도 :

observable = Observable.create(emitter -> { 
     try { 
      Data next = getDataFromDb(); 
      emitter.onNext(next); 
     } catch (SQLiteException e) { 
      emitter.onError(e); 
     } 
    }, Emitter.BackpressureMode.BUFFER) 
    .toList() 
    .compose(applySchedulers()) 
    .replay(1) 
    .autoConnect() 
//start your prefetch 
observable.subscribe()//you should better add some log to see the process 

//In your Activity 
observable.subscribe(/**Your Subscribe**/)// here you will get the replayed value 

공지 것을

:

  1. 당신이 그렇지 않으면 당신은 당신의 재생 가치를 얻을 수 없다, 당신의 관찰 가능한 동일한 인스턴스를 유지해야

  2. 당신이해야 autoConnect()의 다른 과부하 (예 : autoConnect(int numberOfSubscribers, @NonNull Consumer<? super Disposable> connection))를 사용하고 업스트림 소스의 일회용 (Subscription for RxJava 1.x)을 가져옵니다.