Можно ли обновлять View не из UI потока? Какие способы выполнить код в UI потоке предоставляются системой?

Посмотреть в Telegram: @AndroidSobes/54
Нет, в андроиде операции над UI можно выполнять только из UI потока.

Системный API предоставляет следующие методы для выполнения кода в UI потоке:

Activity.runOnUiThread(action: Runnable) – выполняет метод run() на переданном объекте класса Runnable в UI потоке. Если runOnUiThread() вызывается из фонового потока, то объект action добавляется в очередь и выполняется при следующем переключении на UI поток. Если runOnUiThread() вызван из UI потока, то действие выполнится сразу (синхронно);

View.post(action: Runnable) и View.postDelayed(action: Runnable, delayMillis: Long) добавляет действие в очередь UI потока.

Реализации этих методов используют объект Handler, созданный на UI потоке. Это еще один способ выполнить код в UI потоке:

Используем Main Looper при создании объекта Handler и вызываем метод post(action: Runnable).

val handler = Handler(Looper.getMainLooper())
handler.post { /*Ui Thread*/ }