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