Системный 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*/ }