안녕하세요 이번에는 Rx를 사용하면서 Just operation의 scheduler에 대해서 알아 보겠습니다.
우선 Just는 위의 마블다이어그램처럼 데이터를 바로 방출할때 사용합니다. Create처럼 onNext()를 호출 할 필요없이 Just()로 데이터만 넘겨주면 됩니다.
여기서 주의해야 할 부분이 있습니다. Just operation은 subscribeOn을 통해 Scheduler를 지정이 안된다는 점입니다. 즉 Just operation은 Android main thread에서 동작한다고 볼 수 있습니다.
한가지 샘플 코드를 보겠습니다.
{
LogE("start : ${System.currentTimeMillis()}")
Observable.just(sleepFunc())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ LogE(it) }, { LogE("onError") }, { LogE("onCompleted") })
LogE("end : ${System.currentTimeMillis()}")
}
private fun sleepFunc() : String {
LogE("thread name : ${Thread.currentThread().name}")
Thread.sleep(5000)
return "sleep end"
}
결과
2019-12-16 19:37:37.153 12507-12507/com.hjiee.appproject E/hjiee: start : 1576460257153
2019-12-16 19:37:37.153 12507-12507/com.hjiee.appproject E/hjiee: thread name : main
2019-12-16 19:37:42.315 12507-12507/com.hjiee.appproject E/hjiee: end : 1576460262315
2019-12-16 19:37:42.438 12507-12507/com.hjiee.appproject E/hjiee: sleep end
2019-12-16 19:37:42.438 12507-12507/com.hjiee.appproject E/hjiee: onCompleted
위와 같이 I/O Thread로 Scheduler를 지정해주었음에도 Just operation의 thread는 main에서 동작하는것을 확인할 수 있고, sleep을 통한 main이 5초간 pending되어있었다는걸 확인 할 수 있습니다. just를 사용할때 유의해야할 필요가 있을것 같습니다.
감사합니다.