뱅크샐러드 앱이 나날이 성장해 나가면서, 유저분들의 피드백을 많이 들을 수 있게 되었습니다.
안드로이드 앱 같은 경우에는 뒤로가기 버튼을 눌렀을 때 바로 앱이 종료되는게 너무 불편하다는 피드백이 많이 들어와 해당 기능을 추가하기로 결정했습니다.
이 기능을 구현한 많은 블로그 글들을 보면 대부분 Handler.postDelayed
를 활용하거나, 변수를 따로 만들어서 뒤로가기 버튼을 눌렀을 때 누른 시간을 캐싱하는 방식으로 작업한 케이스가 많은데, 이 글에서는 저희가 RxJava를 활용해서 구현한 방법에 대해 소개해드리고자 합니다.
먼저 뒤로가기 버튼을 눌렀을 때 이벤트를 emit할 Subject
를 만들어줍니다. Subject는 Observable이면서 동시에 Subscriber의 역할을 하기 때문에 UI Event 뿐만 아니라 다양한 종류의 Item을 발행하고 처리할 때 Subject를 활용하면 쉽게 해결할 수 있습니다.
onComplete
이 호출되기 직전의 Item만 받는 AsyncSubject
, 가장 최근 emit된 Item으로 구독을 시작하는 BehaviorSubject
, 구독 시점부터 발행된 모든 Item을 받는 PublishSubject
, 구독 이전의 모든 Item들을 받는ReplaySubject
이렇게 총 4가지 Subject가 있는데요, 이 기능 같은 경우는 취소키를 눌렀을 때 발생하는 이벤트들의 시간 간격을 판별하는 로직이 필요하기 때문에 기본값을 가지는 BehaviorSubject
를 생성해주었습니다.
Subject에 데이터를 emit하는 방법은 매우 간단합니다. subject.onNext()
를 해주면 끝! 여기서 주의할 점은 Subject
를 SerializedSubject
로 만들지 않으면 thread safe하지 않기 때문에 여러 Thread에서 Item을 발행하는 경우 꼭 Subject를 Serialize 해주셔야 합니다. (참고링크)
더 자세한 정보는 ReactiveX 홈페이지를 참조해주세요.
이제 뒤로가기 버튼을 눌렀을 때 Item을 emit하는 부분을 작업했으니, Item을 구독하는 부분을 작업해 보도록 하죠!
핵심은 바로 buffer
입니다.
사운들리 백엔드 이야기 (0) | 2020.02.03 |
---|---|
우리 팀과 함께 한 세 번의 생일 (0) | 2020.02.03 |
RxJava2를 도입하며 (0) | 2020.02.02 |
사운들리 방송 송출테스트 이야기 (0) | 2020.02.02 |
스타트업! 해답은 속도일까? (0) | 2020.02.01 |