IT Bookstore 과제 #11 - 실행 중인 API 중지

이제 다음 개발을 진행해야 하는데요. 이번에 하려는 것은 '실행 중인 API 중지'입니다. 그게 실행하는 도중에 사용자가 백 버튼을 눌러서 화면을 종료시킬 수 있는데요. 이 때 API가 실행 중이면, 그것을 종료하는 게 좋습니다. 그것을 이번에 구현하려고 합니다.

API 연동 라이브러리는 retrofit2구요. RxJava 기반을 활용하여 서버로부터 받을 자료를 구독하는 방식을 사용하고 있습니다. 구독을 하기 위해 호출하는 것은 Observable의 subscribe()인데요. 이 함수는 Disposable 객체를 리턴합니다. 이 객체의 dispose() 함수를 호출하면, 실행 중이던 API가 종료되고요. Observable과 연결된 자원들도 해제가 됩니다. 그런데 Observable이 많아지면 이걸 일일이 dispose하기가 쉽지 않죠. CompositeDisposable 객체를 활용하면 됩니다. 이 객체에 Disposable 객체들을 추가할 수 있구요. 종료 시점에 CompositeDisposable 객체의 clear() 함수를 호출하면, 그곳에 포함된 모든 Disposable 객체들이 dispose() 함수를 실행합니다.

아래 코드는 위에 설명드린 것을 적용하는 예입니다.

private val disposable = CompositeDisposable()

fun loadBookDetails(isbn13: String) {
    disposable += bookDetailsUseCase.run(isbn13)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .doOnSubscribe {
            _isLoading.value = true
        }
        .doAfterTerminate {
            _isLoading.value = false
        }
        .subscribe(bookDetailsConsumer, errorConsumer)
}

override fun onCleared() {
    disposable.clear()
}

지난 IT Bookstore 과제

Coin Marketplace

STEEM 0.20
TRX 0.12
JST 0.029
BTC 61451.56
ETH 3442.58
USDT 1.00
SBD 2.51