라벨이 Android인 게시물 표시

Android Retrofit2 RxJava polling: 일정 간격으로 API 호출하기

이 글은 2022년에 작성한 내용을 2026년 기준으로 전면 개정한 글입니다. 기존 URL은 유지하면서 오래된 코드와 사라진 참고 링크를 정리하고, 수명주기를 고려한 RxJava polling 구현과 Kotlin Coroutines 대안까지 새로 작성했습니다. Android Retrofit2 RxJava polling: 일정 간격으로 API 호출하기 안드로이드 앱에서 서버 상태, 장치 상태 또는 작업 진행률을 몇 초마다 확인해야 할 때가 있습니다. 서버가 WebSocket이나 푸시 방식을 제공하지 않는다면 일정한 간격으로 API를 호출하는 polling 방식이 가장 단순한 해결책입니다. 하지만 단순히 타이머에서 Retrofit을 반복 호출하면 다음과 같은 문제가 생길 수 있습니다. 이전 요청이 끝나기 전에 다음 요청이 시작됨 화면이 사라진 뒤에도 네트워크 요청이 계속됨 오류가 한 번 발생하면 전체 polling이 종료됨 Activity 또는 Fragment가 다시 만들어질 때 polling이 중복 실행됨 Disposable을 정리하지 않아 메모리 누수가 발생함 이 글에서는 Retrofit2와 RxJava를 이용해 이러한 문제를 피하는 구현을 만들어 봅니다. 마지막에는 현재 안드로이드에서 널리 사용하는 Kotlin Coroutines와 Flow 방식도 비교합니다. 문제 이 글에서 사용하는 해결 방법 첫 호출이 늦음 interval(0, 10, ...) 으로 즉시 시작 이전 요청과 다음 요청이 겹침 switchMapSingle() 로 최신 요청만 유지 한 번의 오류로 polling 종료 API 요청 내부에서 오류를 상태 값으로 변환 화면이 사라져도 계속 호출 onStart() 와 onStop() 에서 시작·중지 polling이 중복 실행됨 기존 Disposable 상태 확인 ViewModel 제거 후 작업이 남음 onCleared() 에서 Disposable 정리 예제의 동작 ...