Я хочу знать, когда выполняется метод postDelayed (...), и есть много сообщений, ожидающих очереди сообщений. В этом случае, когда runnable будет запущен? это будет после истечения времени, определенного в методе? или он будет ждать, пока его роль не войдет в очередь сообщений? или что... ?Как работает метод postDelayed (Runnable runnable, Long delayMilliSeconds)?
ответ
Давайте проверить исходный код и документацию:
Вызывает Runnable г, которые будут добавлены в очередь сообщений, необходимо запустить по истечении заданного промежутка времени истечет. Прогон будет запущен в потоке, к которому прикреплен этот обработчик. Временная база uptimeMillis(). Время, проведенное в глубоком сне, добавит дополнительную задержку к исполнению.
Теперь давайте проверим sendMessageDelayed
:
Enqueue сообщение в очередь сообщений после всех ожидающих сообщений до (текущее время + delayMillis).
public final boolean sendMessageDelayed(Message msg, long delayMillis)
{
if (delayMillis < 0) {
delayMillis = 0;
}
return sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis);
}
Так, postDelayed добавить ваша задача будет выполнена после всех ожидающих сообщений, но до того времени безотказной + задержки, что вы положили.
Проверить этот вопрос для более подробного объяснения: Does postDelayed cause the message to jump to the front of the queue?
Надеется, что это помогает.
Но что делать, если запуск ожидающих сообщений занимает больше, чем delayMillis? – HiddenDroid
проверить принятый ответ на этот вопрос: http://stackoverflow.com/questions/27240015/does-postdelayed-cause-the-message-to-jump-to-the-front-of-the-queue –
Это именно то, что вы хотите знать. –