Rx
RxAndroid Scheduler 자세히 알아보기
봄석
2019. 9. 9. 19:05
RxAndroid Scheduler 자세히 알아보기
RxAndroid에서는 스케쥴러를 통해 어느 쓰레드에서 실행이 될지 결정 할 수 있습니다.
스케쥴러는 subsctibeOn(), observeOn() 에서 각각 지정할 수 있는데
subsctibeOn()은 observable의 작업을 시작하는 쓰레드를 선택 할 수 있습니다.
중복해서 적을 경우 가장 마지막에 적힌 스레드에서 시작합니다.
observeOn()은 이후에 나오는 오퍼레이터, subscribe의 스케쥴러를 변경 할 수 있습니다.
위 그림을 보면 SubscribeOn 연산자를 중간에서 지정하고있습니다.연산자 체인 중 아무 곳에서 호출해도 문제되지 않습니다.
즉 , 오퍼레이터 어디서든지 subscribveOn을 사용하면 시작할 스케줄러를 정할 수 있습니다
RxJava와 RxAndroid 에서 제공하는 스케줄러
- Schedulers.computation() - 이벤트 룹에서 간단한 연산이나 콜백 처리를 위해 사용됩니다.
RxComputationThreadPool라는 별도의 스레드 풀에서 돌아갑니다. 최대 cㅔu갯수 개의 스레드 풀이 순환하면서 실행됩니다.
- Schedulers.immediate() - 현재 스레드에서 즉시 수행합니다.
observeOn()이 여러번 쓰였을 경우 immediate()를 선언한 바로 윗쪽의 스레드를 따라갑니다.
- Schedulers.from(executor) - 특정 executor를 스케쥴러로 사용합니다.
- Schedulers.io() - 동기 I/O를 별도로 처리시켜 비동기 효율을 얻기 위한 스케줄러입니다.
자체적인 스레드 풀 CachedThreadPool을 사용합니다. API 호출 등 네트워크를 사용한 호출 시 사용됩니다.
- Schedulers.newThread() - 새로운 스레드를 만드는 스케쥴러입니다.
- Schedulers.trampoline() - 큐에 있는 일이 끝나면 이어서 현재 스레드에서 수행하는 스케쥴러.
- AndroidSchedulers.mainThread() - 안드로이드의 UI 스레드에서 동작합니다.
- HandlerScheduler.from(handler) - 특정 핸들러 handler에 의존하여 동작합니다.