본문 바로가기

Android/Reative

rx 를 이용한 Timer 처리

728x90

앱을 개발하다가 보면 TimeOut 스펙을 처리하는 상황이 발생 한다. TimeOut 를 처리하는 방법에는 여러 가지 경우가 있어 각 개발 상황에 맞게 적용하면 된다. 여기서는 rx 를 이용해서 10초 TimeOut Event 발생 및 TimeOut 후의 동작을 처리하는 로직에 대해서 확인한다.

TimeOut 처리 방법

  1. Handler 를 이용한 처리
  2. Timer shedule 를 이용한 처리
  3. Kotlin 의 경우 Coroutine 을 이용하여 처리
  4. rx event 를 활용한 처리

rxkotlin 을 이용한 TimeOut 처리

  1. Oberservable 를 통해서 주기적인 Interval 을 발생 시킨다.
  2. 해당 Interval 이 기준점에 도달하면 TimeOut 처리 한다.
private var callbackTimerDisposable: Disposable? = null // TimeOut rx Event 를 관리하는 disposable
private var callbackTimerObservable: Observable<Long> = Observable.interval(1000, TimeUnit.MILLISECONDS)
private val timeOutCallback = 10L // TimeOut 시간 10s
...
RxUtils.clearDispose(callbackTimerDisposable)
callbackTimerDisposable =
  callbackTimerObservable.subscribe {
    if (it == timeOutCallback) {
      Timber.tag(logTag).e("updateTimeOutEvent run")
      VoiceChromeUtils.updateAgentToCommonError(EdithNetworkStatus.Status443.status, EicErrorCause.CLOSE_STREAM_BY_TIME_OUT.cause)
      RxUtils.clearDispose(callbackTimerDisposable)
    }
  }
RxUtils.addDisposable(callbackTimerDisposable)
728x90