Ответ
В Android есть несколько подходов для асинхронного выполнения кода:
- Threads + Handlers – базовый подход, но требует ручного управления потоками.
Thread {
val result = doWork()
Handler(Looper.getMainLooper()).post { updateUI(result) }
}.start()
-
AsyncTask (устарел) – простой, но не рекомендуется из-за утечек памяти и проблем с поворотами экрана.
-
RxJava – мощная библиотека для реактивного программирования:
Observable.fromCallable { doWork() }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { result -> updateUI(result) }
- Coroutines (рекомендуется) – легковесные потоки с простым синтаксисом:
lifecycleScope.launch {
val result = withContext(Dispatchers.IO) { doWork() }
updateUI(result)
}
- WorkManager – для отложенных фоновых задач, которые должны выполняться даже после закрытия приложения.
Для новых проектов лучше использовать Coroutines + Flow или RxJava, если нужна сложная реактивная логика.