본 내용은 필자가 학습한 내용을 정리하는 내용입니다. 대부분 의 내용이 아래 책의 내용이므로 원서를 구매해서 직접보시는걸 추천드립니다! RxJava 프로그래밍 리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에 저자님의 블로그 https://brunch.co.kr/@yudong#info |
리액티브 연산자(함수) 분류 - 카테고리
연산자 종류 |
연산자 함수 |
생성 연산자 |
just(), fromXXX(), create(), interval(), ragne(), timer(), intervalRange(), defer(), repeat() |
변환 연산자 |
map(),flatMap(), concatMap(), switchMap() , groupBy(), scan(), buffer(), window() |
필터 연산자 |
filter(), take(), skip(), distinct() |
결합 연산자 |
zip(), combineLatest(), merge(), concat()
|
조건 연산자 |
amb(), takeUtil(), skipUtil(), all()
|
에러 처리 연산자 |
onErrorReturn(), onErrorResumeNext(), retry(), retryUntil() |
기타 연산자 |
subscribe(), subscribeOn(), observeOn(), reduce(), count()
|
생성연산자 - interval()함수
interval() 함수는 일정 시간 간격으로 데이터 흐름을 생성합니다.
interval()함수의 마블다이어그램
출처 - http://reactivex.io/documentation/operators/interval.html
interval() 함수는 주어진 시간 간격으로 0부터 1씩 증가하는 Long객체를 발행합니다.
주로사용하는 함수의원형은 두개가 있습니다.
1 2 3 | @SchedulerSupport(SchedulerSupport.COMPUTATION) public static Observable<Long> interval(long period, TimeUnit unit) public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit) | cs |
두번째 원형은 동작은 같고 최초 지연시간(initialDelay)를 조절할 수 있습니다.
보통 초기 지연시간 없이 (initialDelay를 0으로 입력함) 바로 데이터를 발행하기 위해서 사용합니다.
@SchedulerSupport(ShcedulerSupport.COMPUTATION) 애너테이션은 interval() 함수의 동작이 계산 스케줄러에서 실행된다는 의미입니다. 현재의 스레드가 아니라 계산을 위한 별도의 스레드에서 동작한다고 생각하면 됩니다.
interval() 함수는 기본적으로 영원히 지속 실행되기 때문에 폴링 용도로 많이 쓰입니다
interval()함수의 활용 예
Observable인 source 변수는 100ms 간격으로 0부터 데이터를 발행한 후 map()함수를 호출하여 입력값에 1을 더하고 100을 곱합니다.
따라서 100,200,300...등의 데이터를 발행합니다. take() 는 최초 5개의 데이터만 취급합니다.
CommonUtils.exampleStart();에서는 System.currentTimeMillis()를 호출하여
시작시간을 밀리세컨드 측정합니다.
Log::it에서는 System.currentTimeMillis() - 위에서 측정한 시작시간 을 계산하여
long 으로 저장합니다.
결과값에서 value 이전에 두번째 값이 그결과로 ms로 보이게됩니다.
sleep(1000)을 해주는 이유는 interval작업이 main 스레드가 아니라 work 스레드에서 이루어지므로
sleep을 해주지않으면 main 스레드는 할일이 없는것으로 간주하고 프로그램을 바로 종료하기 때문입니다.
interval() 함수의 두번째 원형 활용 예
RxComputationThreadPool-2 | 401 | value = 104
첫번째 예제와 비교했을때 initialDelay 인자만 0L로 입력한 것을 제외하면 다른 내용은 같습니다.
실행결과를 보면 첫 시간값이 398에서 1로 줄었습니다. 초기 지연값이 0ms로 줄었기 때문입니다.
'Rx' 카테고리의 다른 글
리액티브연산자[생성연산자]-9(intervalRange함수) (0) | 2018.12.26 |
---|---|
리액티브연산자[생성연산자]-8(timer함수,range함수) (0) | 2018.12.26 |
리액티브연산자 -6(데이터 쿼리하기,map,filter,reduce 함수) (0) | 2018.12.24 |
리액티브연산자 -5 (reduce함수) (0) | 2018.12.24 |
리액티브연산자 -4 (filter함수,first,last,take,skip) (0) | 2018.12.24 |
댓글