В документации для Handler.postDelayed(Runnable r, long delayMillis) говорится:
Вызывает добавление Runnable r в очередь сообщений для запуска по истечении указанного времени.
r Runnable, который будет выполнен. delayMillis Задержка (в миллисекундах) до выполнения Runnable.
ПРИМЕЧАНИЕ. Последнее слово Выполнено и не Добавлено в очередь сообщений. Runnable мгновенно добавляется в конец очереди сообщений. Это означает, что задержка выполнения этого Runnable будет равна времени, затрачиваемому на выполнение сообщений/runnables перед этим Runnable в очереди сообщений. Как гарантируется, что оба времени равны? Я что-то упускаю?
Например, предположим, что MessageQueue в настоящее время содержит A, B, C, что занимает 1, 1,6 и 2 секунды соответственно, а handler.postDelayed(R, 4000) теперь добавляет R в конец MessageQueue. A, B, C будут завершены за 4,6 секунды, но запуск R запланирован через 4 секунды. Как это возможно? Что делать, если задержка составила более 4,6 секунды?
URL – справочная страница Android для Сообщение обработчика задержано
delayMillis
миллисекунды. - person Simas   schedule 30.08.2014