Ответ
В MVP отмена запросов обычно реализуется через:
- Disposable (RxJava)
private var disposable: Disposable? = null
fun loadData() {
disposable = repository.getData()
.subscribe({ view.showData(it) }, { view.showError(it) })
}
override fun onDestroy() {
disposable?.dispose()
}
- Coroutine Job (Kotlin Coroutines)
private var job: Job? = null
fun loadData() {
job = viewModelScope.launch {
try {
val data = repository.getData()
view.showData(data)
} catch (e: Exception) {
view.showError(e)
}
}
}
fun cancelRequests() {
job?.cancel()
}
- Callback + флаг отмены
private var isCancelled = false
fun loadData() {
repository.getData(object : Callback {
override fun onSuccess(data) {
if (!isCancelled) view.showData(data)
}
})
}
fun cancelRequests() {
isCancelled = true
}
Лучший вариант – RxJava или Coroutines, так как они предоставляют встроенные механизмы отмены.