Ответ
Для выполнения операций без блокировки UI используйте корутины или AsyncTask (устарел).
Корутины (рекомендуется):
lifecycleScope.launch(Dispatchers.IO) {
// Тяжелая операция (сеть, БД и т.д.)
val result = doBackgroundWork()
withContext(Dispatchers.Main) {
// Обновление UI после завершения
updateUI(result)
}
}
RxJava:
Observable.fromCallable { doBackgroundWork() }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { result -> updateUI(result) }
Thread + Handler (если без сторонних решений):
Thread {
val result = doBackgroundWork()
Handler(Looper.getMainLooper()).post {
updateUI(result)
}
}.start()
Важно:
- Не выполняйте долгие операции в
onCreate(),onClick()и т.д. - Для работы с жизненным циклом (Activity/Fragment) используйте
lifecycleScopeилиviewModelScope.