Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
07 Июн 2023
2 мин
163

Запуск кода в основном потоке из другого потока

Одной из распространенных ситуаций, с которой сталкиваются разработчики при работе с многопоточностью в Android, является необходимость выполнения

Одной из распространенных ситуаций, с которой сталкиваются разработчики при работе с многопоточностью в Android, является необходимость выполнения определенного кода в основном потоке из другого потока. Как правило, подобная ситуация возникает при выполнении длительных операций в фоновом потоке — например, загрузки данных из интернета или чтения больших файлов. После завершения такой операции часто требуется обновить пользовательский интерфейс, что допускается только из основного потока.

Одно из возможных решений данной задачи — использование класса Handler, который позволяет отправлять и обрабатывать Message и Runnable объекты, связанные с очередью сообщений потока.

Handler mainHandler = new Handler(Looper.getMainLooper());

Looper.getMainLooper() возвращает основной цикл, который уже привязан к основному потоку. Создание Handler с этим циклом позволяет отправить задачу на выполнение в основном потоке.

mainHandler.post(new Runnable() {
    @Override
    public void run() {
        // Ваш код для выполнения в основном потоке
    }
});

Метод post() позволяет поместить Runnable объект в очередь сообщений, который будет выполнен в том потоке, к которому привязан Handler. В данном случае, Runnable будет выполнен в основном потоке.

Таким образом, с помощью Handler и Looper.getMainLooper() можно безопасно выполнять код в основном потоке из другого потока. Это особенно полезно при работе с пользовательским интерфейсом, поскольку обновление элементов интерфейса допускается только из основного потока.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий