Как асинхронный запрос завершается

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

Ответ

В Android асинхронные запросы обычно завершаются через колбэки, корутины или RxJava:

  1. Колбэки (Retrofit, Volley):
api.getData().enqueue(object : Callback<Data> {
    override fun onResponse(call: Call<Data>, response: Response<Data>) {
        // Успешный ответ
    }
    override fun onFailure(call: Call<Data>, t: Throwable) {
        // Ошибка
    }
})
  1. Корутины (с suspend функциями):
viewModelScope.launch {
    try {
        val data = api.getData() // suspend функция
        // Обработка данных
    } catch (e: Exception) {
        // Обработка ошибки
    }
}
  1. RxJava:
api.getData()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ data -> 
        // Успех 
    }, { error -> 
        // Ошибка
    })

Завершение может быть успешным (с данными) или с ошибкой. Важно всегда обрабатывать оба сценария и освобождать ресурсы.