seoft

rxjava 호출 후 1초간 재 호출이 안될경우 이벤트 실행 본문

android

rxjava 호출 후 1초간 재 호출이 안될경우 이벤트 실행

seoft 2019. 9. 22. 16:27

[문제정의]

호출 후 1초간 재 호출이 안될경우 이벤트 실행을 구현하려한다.

쉽게 설명해서 버튼을 누른 후 1초가 지나면 toast(특정 이벤트)가 출력된다고 가정해보자

버튼을 누른후 1초를 못채우고 0.8초후에 다시 누르게되면 다시 1초를 기다려야 toast가 출력을 기대하는 상황

 

Handler 혹은 쓰레드를 사용하여 구현할 수 도 있지만 rxjava를 활용해 간단하게 구현 해본다

 

 

 

[문제해결]

Disposable종류 중 SerialDisposable를 사용한다

 

SerialDisposable ?

하나의 disposable 을 가지며, 새로운 disposable 이 설정될때 이전에 등록된 disposable 을 dispose 시킨다.

 

따라서 timer 1초 후 toast msg를 출력시키되 해당 disposable을 SerialDisposable 에 등록시키면

1초가 되기 전에 다시 호출이 됬을경우 이전의 1초까지의 카운트를 dispose시키고 새로 1초까지의 카운트를 진행하게 된다.

 

var serialDisposable = SerialDisposable() // 전역

 

val disposable = Observable
    .timer(1000,TimeUnit.MILLISECONDS)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe {
        "토스트 메세지".toast()
    }

 

serialDisposable.set(disposable)

 

 

 

 

[관련코드]

https://gist.github.com/seoft/7b6db60bdd724a5b935d02d1cb85f4c2

 

https://seoft.tistory.com/11?category=1066264

https://seoft.tistory.com/11?category=1066264. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

Comments