RxJava기록 - 스케줄러에서 observeOn()

dada·2022년 1월 13일
0

RxJava

목록 보기
12/12

  • subscirbeOn(A)를 호출했을 때는 데이터를 발해앟는 첫 줄이 스레드 A에서 실행. 이후에는 observeOn() 함수가 호출될 때까지 스레드 A에서 실행
  • observeOn(B)를 호출하면 그다음인 두 번째 줄부터는 스레드 B에서 실행
  • map()함수는 스레드 변경과는 상관없으므로 세번째 줄은 계속 스레드 B실행을 유지
  • observeOn(C)를 함수를 호출하면 그 다음 데이터 흐름은 스레드 C에서 실행


💡 subscribeOn() 함수는 호출했을 때 결정한 스레드를 고정하며 이후에는 다시 호출해도 스레드가 바뀌지 않는다.
observeOn()은 여러 번 호출할 수 있으며 호출되면 그 다음부터 동작하는 스레드를 바꿀 수 있다.

🐥Rest Api를 한 번만 호출하여 날씨, 온도, 도시 정보 얻어오기

public void run{
	CommonUtils.exampleStart();
	
	Observable<String> source = Observable.just(URL + API_KEY)
		.map(OkHttpHelper::getWithLog)
		.subscribeOn(Schedulers.io())
		.share()
		.observeOn(Schedulers.newThread());

source.map(this::parseTemperature).subscribe(Log::it);
source.map(this::parseCityName).subscribe(Log::it);
source.map(this::parseCountry).subscribe(Log::it);

CommonUtils.sleep(3000);

ConnectableObservable 클래스를 사용

  • 1개의 Observable을 여러 구독자가 공유하는 방식으로 차가운 Observable을 뜨거운 Observable로 변환
  • share()함수는 publish()함수와 refCount() 함수를 활용
profile
기록하기

0개의 댓글