2016-09-07 5 views
0

У меня есть обработчик, который периодически обновляет пользовательский интерфейс, от таймера. Иногда обновление может занять больше времени, чем интервал таймера. Что произойдет в этом случае? Монитор Android handlemessage, чтобы убедиться, что он закончил свою работу, или я должен сделать это сам? Наверное, глупый вопрос, но не нашел никакой ссылки на него после долгого поиска.Можно ли повторно ввести ручную работу андроида?

EDIT:

Я спрашиваю, потому что у меня есть ConcurrentLinkedQueue и элементы из него удаляются внутри метода вызывается из handlemessage. Это единственное место, где они удаляются, и иногда я вижу, что вместо элемента удаляются 2 элемента. Подобно handlemessage был повторно введен. Если, согласно @Gabe, это невозможно, какое другое объяснение может быть там?

+0

Нет, это не может быть сделано вам по вашей логике. – Amy

+0

любая ссылка, подтверждающая это? просто хочу знать, какую ссылку я пропустил. :) – Flot2011

ответ

1

Все сообщения обработчику происходят в одной и той же теме. Таким образом, невозможно иметь повторные экземпляры, если вы не вызываете handler.handleMessage напрямую. обработчики являются частью цикла событий - события отправляются объекту Looper, и когда поток заканчивает каждое событие, он получает следующее событие от Looper (в данном случае событие является обработчиком) и обрабатывает его в порядке FIFO.

1

Сообщения, отправленные в Handler, помещаются в очередь и обрабатываются по порядку, но это не означает, что они обрабатываются в ровном темпе. Рассмотрим этот код:

myHandler.postDelayed(thisRunnableWillTakeTenSeconds, 1000); 
myHandler.postDelayed(anotherRunnable, 2000); 

Runnable Второй будет выполнять сразу же после первого, а не 1 секунду, потому что это уже будет актуально, когда первый один завершается.

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