안드로이드 개발 팁 #22 - RxJava 활용하여 몇초 후 코드 실행
일정한 시간 뒤에 특정 코드를 실행하고 싶었습니다. 자바/코틀린에서 제공하는 타이머를 사용하는 방법이 있지만, 불편한 점이 있습니다. 그것은 도중에 취소하는 코드를 만드는 게 좀 불편하다는 것입니다. RxJava를 사용하면 좀 더 간결한 코드를 만들 수 있더라구요. 이번에는 이에 대해 정리해볼까 합니다.
이것이 필요한 케이스
외부 업체로부터 제공받은 동영상 플레이 화면이 있습니다. 플레이어는 그곳과 계약한 SDK를 활용하구요. 플레이를 요청하면 준비가 되었거나 오류가 발생할 때 리스너가 실행됩니다. 문제는요. 아무 리스너도 실행되지 않아 로딩 중 화면으로 멈출 수 있다는 것입니다. 그러면 사용자는 아무 것도 할 수가 없는데요. 일정 시간이 지나면 오류 팝업을 띄우고 플레이 화면을 종료하는 것도 나름의 방법이 아닐까 합니다.
5초 후 토스트 띄우기
아래 코드는 5초 후 토스트를 띄웁니다. 이때, Observable의 delay 메소드를 활용합니다.
val disposable = Observable.just(true).delay(5, TimeUnit.SECONDS)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe {
        Toast.makeText(this@MainActivity, "OK", Toast.LENGTH_SHORT).show()
    }
만약 어떤 작업에 성공하여 예약한 작업을 취소하려면, 아래와 같이 Disposable 객체의 dispose() 메소드를 실행하면 됩니다.
disposable..dispose()
지난 안드로이드 개발 팁
- #21 - 맥북 아이클라우드로 프로젝트 복사 후 빌드 안 되는 문제
- #20 - 툴바 정의 방법 (1) 타이틀 및 배경색 설정
- #19 - Index corrupted 오류
- #18 - 오래된 프로젝트의 build.gradle 파일 수정
- #17 - 뷰 바인딩 적용된 프래그먼트에 데이터 바인딩 적용 후 빌드시 발생하는 오류
- #16 - 특정 일이 속하는 주의 모든 날짜를 배열로 구하는 방법
- #15 - RecyclerView에 리스트를 로딩한 후 처리할 일 작성
- #14 - RecyclerView 뷰에서 항목 클릭시 뷰가 깜빡이는 문제
- #13 - 공통으로 사용할 색상 리소스 만들고 뷰에 적용
- #12 - 코틀린 언어 변환시 추가로 수정할 build.gradle 파일들
- #11 - 리스트/배열로부터 찾을 원소의 위치 읽기
- #10 - 앱의 다크 모드 진입 막는 방법
- #9 - 데이터 바인딩/뷰 바인딩 사용하지 않을 경우 자체적으로 만드는 Views 클래스
- #8 - TextView에 linear gradient color 적용하기
- #7 - 다이얼 화면 연결하기 위해 Activity 클래스의 확장 메소드 작성
- #6 - 웹 브라우저를 여는 확장 메소드 작성
- #5 - HTML 적용된 TextView에서 링크 클릭은 어떻게 구현?
- #4 - RxJava의 Observable, Single 객체의 기본 설정 수행 메소드 정의하기
- #3 - 특정 화면 이동시 다른 화면 모두 닫기
- #2 - HTML 이스케이핑 적용된 문자 풀어주기
- #1 - TextView로 HTML 내용 보여주기Posted through the AVLE Dapp (https://avle.io) 
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.