Какие знаешь способы отмены запросов для Presenter у View в MVP

«Какие знаешь способы отмены запросов для Presenter у View в MVP» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В MVP отмена запросов обычно реализуется через:

  1. Disposable (RxJava)
private var disposable: Disposable? = null

fun loadData() {
    disposable = repository.getData()
        .subscribe({ view.showData(it) }, { view.showError(it) })
}

override fun onDestroy() {
    disposable?.dispose()
}
  1. 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()
}
  1. 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, так как они предоставляют встроенные механизмы отмены.