2015-08-05 2 views
1

Я хочу знать, когда выполняется метод postDelayed (...), и есть много сообщений, ожидающих очереди сообщений. В этом случае, когда runnable будет запущен? это будет после истечения времени, определенного в методе? или он будет ждать, пока его роль не войдет в очередь сообщений? или что... ?Как работает метод postDelayed (Runnable runnable, Long delayMilliSeconds)?

ответ

2

Давайте проверить исходный код и документацию:

Вызывает 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?

Надеется, что это помогает.

+0

Но что делать, если запуск ожидающих сообщений занимает больше, чем delayMillis? – HiddenDroid

+0

проверить принятый ответ на этот вопрос: http://stackoverflow.com/questions/27240015/does-postdelayed-cause-the-message-to-jump-to-the-front-of-the-queue –

+0

Это именно то, что вы хотите знать. –

 Смежные вопросы

  • Нет связанных вопросов^_^