Handler – это класс, который используется для работы с очередью сообщений, связанной с потоком. Хэндлер позволяет отправлять сообщения в другие потоки с задержкой или без, а также обрабатывать полученные сообщения.
Хэндлер всегда связан с
лупером, который в свою очередь связан с каким-либо потоком. При создании хэндлера в конструктор можно передать объект
Looper. Если используется дефолтный конструктор, то хэндлер создается на текущем потоке. Если с потоком не связан лупер, то при создании хэндлера бросается
RuntimeException.
Методы
post*() используются для шедулинга объектов
Runnable, которые выполняются на связанном с хэндлером потоке. Объекты
Runnable добавляются в очередь сообщений. Метод
post(action: Runnable) добавляет объект
action в конец очереди без специального условия по времени, т.е.
action будет запущен, как только это будет возможно. Методы
postAtTime() и
postDelayed() принимают параметром конфигурацию времени (точное время и задержку относительно текущего времени соответственно). На скриншоте пример шедулинга действия на UI потоке.
Класс
Handler имеет методы
send*(), аналогичные методам
post*(), но для шедулинга объектов
Message, которые позволяют передать произвольный объект.
Пример использования хэндлера для обработки сообщений приведен
в предыдущем посте.