Какие знаешь подходы в Android для асинхронного программирования

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

Ответ

В Android есть несколько подходов для асинхронного выполнения кода:

  1. Threads + Handlers – базовый подход, но требует ручного управления потоками.
    Thread {
        val result = doWork()
        Handler(Looper.getMainLooper()).post { updateUI(result) }
    }.start()
  1. AsyncTask (устарел) – простой, но не рекомендуется из-за утечек памяти и проблем с поворотами экрана.

  2. RxJava – мощная библиотека для реактивного программирования:

    Observable.fromCallable { doWork() }
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { result -> updateUI(result) }
  1. Coroutines (рекомендуется) – легковесные потоки с простым синтаксисом:
    lifecycleScope.launch {
        val result = withContext(Dispatchers.IO) { doWork() }
        updateUI(result)
    }
  1. WorkManager – для отложенных фоновых задач, которые должны выполняться даже после закрытия приложения.

Для новых проектов лучше использовать Coroutines + Flow или RxJava, если нужна сложная реактивная логика.