UIThread - это основной поток исполнения для вашего приложения.Именно здесь выполняется большая часть кода вашего приложения.Все компоненты вашего приложения (Activity, Services, ContentProviders, BroadcastReceivers) создаются в этом потоке, и любые системные вызовы этих компонентов выполняются в этом потоке.
Например, предположим, что ваше приложение представляет собой одно действиеучебный класс.Затем все методы жизненного цикла и большая часть кода обработки событий выполняются в этом UIThread.Это такие методы, как onCreate
, onPause
, onDestroy
, onClick
и т. Д. Кроме того, здесь выполняются все обновления пользовательского интерфейса.Все, что вызывает обновление или изменение пользовательского интерфейса, должно происходить в потоке пользовательского интерфейса.
Для получения дополнительной информации о процессах и потоках вашего приложения нажмите здесь.
Когда вы явно создаете новый поток для работы в фоновом режиме, этот код не запускаетсяUIThread.Так что же произойдет, если этот фоновый поток должен сделать что-то, что изменяет пользовательский интерфейс?Вот для чего runOnUiThread
.На самом деле вы должны использовать обработчик (см. Ссылку ниже для получения дополнительной информации об этом).Он предоставляет этим фоновым потокам возможность выполнять код, который может изменять пользовательский интерфейс.Они делают это, помещая код, изменяющий пользовательский интерфейс, в объект Runnable и передавая его методу runOnUiThread.
Для получения дополнительной информации о порождении рабочих потоков и обновлении из них пользовательского интерфейса нажмите здесь
Лично я использую метод runOnUiThread
только в своих тестах инструментовки.Поскольку тестовый код не выполняется в UIThread, этот метод необходимо использовать для запуска кода, который изменяет пользовательский интерфейс.Итак, я использую его для добавления событий нажатия и нажатия клавиш в мое приложение.Затем я могу проверить состояние приложения, чтобы убедиться, что все правильно.
Для получения дополнительной информации о тестировании и запуске кода в UIThread нажмите здесь