Handler – это класс, который используется для работы с очередью сообщений, связанной с потоком. Хэндлер позволяет отправлять сообщения в другие потоки с задержкой или без, а также обрабатывать полученные сообщения.

Хэндлер всегда связан с лупером, который в свою очередь связан с каким-либо потоком. При создании хэндлера в конструктор можно передать объект Looper. Если используется дефолтный конструктор, то хэндлер создается на текущем потоке. Если с потоком не связан лупер, то при создании хэндлера бросается RuntimeException.

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

Класс Handler имеет методы send*(), аналогичные методам post*(), но для шедулинга объектов Message, которые позволяют передать произвольный объект.

Пример использования хэндлера для обработки сообщений приведен в предыдущем посте.