Ответ
В Android есть несколько основных подходов:
- Callbacks - передача функции для обработки результата:
api.getData { result ->
// handle result
}
- RxJava - реактивное программирование:
api.getData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { result -> }
- Coroutines - наиболее современный способ:
viewModelScope.launch {
val result = withContext(Dispatchers.IO) {
api.getData()
}
// update UI
}
- LiveData + корутины:
val data = liveData {
emit(api.getData())
}
- AsyncTask (устарел)
- ListenableFuture (из Guava)
Корутины сейчас являются предпочтительным способом благодаря простоте и интеграции с Jetpack компонентами. Они позволяют писать последовательный код без callback hell.