Какие знаешь способы работы с асинхронными операциями

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

Ответ

В Android есть несколько основных подходов:

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

Корутины сейчас являются предпочтительным способом благодаря простоте и интеграции с Jetpack компонентами. Они позволяют писать последовательный код без callback hell.