Можно ли обновить view не из UI потока

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

Ответ

Нет, обновлять View напрямую из не-UI потока нельзя. Это вызовет CalledFromWrongThreadException. Все операции с UI должны выполняться в основном потоке.

Для обновления View из фонового потока используйте:

  • runOnUiThread()
  • View.post()
  • Handler с Looper.getMainLooper()
  • LiveData или RxJava с observeOn(AndroidSchedulers.mainThread())

Пример:

thread {
    // Фоновая работа
    textView.post { 
        textView.text = "Обновлено из фона" 
    }
}