Study Programming/RxJava

RxJava_5.5 Observable 언제 누가 만드는지

네모메모 2020. 5. 24. 10:45
반응형

 

Observable 팩토리 함수들 복습하다

몇가지 관점에서 혼란이 와서 재정리!


Observable stream생성 시점

 - Observable stream은 Observable 생성과 같이 생성되는 것인지, 나중에 Observer가 subscribe한 시점에 생성되는 것인지 구분

 

 

알아보고자 하는 이유

 - 자주 변경되는 데이터를 아이템으로 전달 시 주의하기 위해 알아보는 것이 필요

 - Observable 아이템을 얻어오는 로직이 오래 걸리거나 무거운 경우 메인 쓰레드가 지연되는 것 주의 필요
 

 

Test 방법

  - 예제 : Observable 생성 전 "Android10"값을 가진 변수 생성 후, onNext()에서 이 변수를 전달하고,
             subscribe 전에 "Android11"값으로 수정함

 

 

확인 결과

- Observable 생성 시 정해진 데이터 값을 받는 경우 모두 Observable이 생성될 때 stream을 만드는 것으로 보임

Observable 생성 팩토리 Observable stream 생성 시점 테스트 코드 링크
Observable.create() subscribe될 때  [Link]
Observable.just() Observable 생성될 때 [Link]
Observable.fromIterable() Observable 생성될 때
(단, Iterable 내 아이템 변경은 subscribe 시점에 반영됨)
[Link]
Observable.range() Observable 생성될 때 [Link]
Observable.interval() Observable 생성될 때  
Observable.error() Observable 생성될 때
(단, onError() 전달 파라미터값의 변경은 subscribe 시점에 반영됨)
[Link]
Observable.defer() subscribe될 때  [Link]
Observable.fromCallable() subscribe될 때  [Link]

 

 

- "subscribe될 때" 생성되는 팩토리 함수들은 Observable.subscribeOn(Schedulers.io()) 함수로 메인쓰레드 지연됨을 방지할 수 있다.
    (Observable 아이템을 얻어오는 로직이 오래 걸리거나 무거운 경우)

Example1) Observable.create() : subscribe될 때 stream생성되므로, 메인쓰레드 지연되지 않음

Example1 Result)

Start Time = 15:20:05
[MainThread] subscribe() called Time = 15:20:05
[MainThread] End Time = 15:20:05
heavyWork() called Time = 15:20:05
[Observer] onNext() : Android11, called Time = 15:20:08


   

Example2) Observable.just() : Observable 생성될 때 stream생성되므로, 메인쓰레드 지연됨

 

Example2 Result)

[MainThread] Start Time = 15:22:32
heavyWork() called Time = 15:22:32
[MainThread] subscribe() called Time = 15:22:35
[MainThread] End Time = 15:22:35
[Observer] onNext(Android11), Time = 15:22:35
[Observer] onComplete()

 


END!

 


스터디 도움 참조 블로그 (References)

- [도서] RxJava 시작하기, 원제 Learning Rxjava, 저자 토마스 닐드| 역자 조승진 |에이콘출판 |2019.07.24

http://book.naver.com/bookdb/book_detail.nhn?bid=12801360

 
- RecativeX 공식사이트

http://reactivex.io/intro.htm

 

 

반응형