Ответ
В Android для многопоточности чаще всего использую:
- Kotlin Coroutines – предпочтительный способ для асинхронных операций. Легковесные, удобные с точки зрения отмены и обработки ошибок.
viewModelScope.launch {
val result = withContext(Dispatchers.IO) {
// Блокирующая операция
}
updateUI(result)
}
- RxJava – для сложных потоков данных, но сейчас чаще заменяют на Coroutines.
- Handler/Looper – для работы с главным потоком (например,
Handler(Looper.getMainLooper())). - ExecutorService – для пула потоков в фоновых задачах.
- LiveData/Flow – для потокобезопасной передачи данных в UI.
Важно избегать блокировок UI-потока и правильно выбирать Dispatcher в Coroutines (IO – для сети/БД, Default – для CPU-интенсивных задач).