Короткий ответ:
Метод nativePollOnce
используется для «ждать» до следующего Message
становится доступным. Если время, проведенное во время этого звонка, длинное, ваш основной (UI) поток не имеет реальной работы и ждет, когда последующие события будут обработаны. Не нужно беспокоиться об этом.
Объяснение:
Поскольку «основной» поток отвечает за разработку пользовательского интерфейса и обработки различных событий, это Runnable
имеет цикл, который обрабатывает все эти события. Петля управляется Looper
, и ее работа довольно проста: она обрабатывает все сообщения в MessageQueue
.
А Message
добавлен в очередь, например, в ответ на входные события, в качестве обратного вызова рендеринга кадра или даже ваши собственные вызовы Handler.post
. Иногда основной поток не имеет работы (т. Е. Нет сообщений в очереди), что может произойти, например. сразу после завершения рендеринга одного кадра (поток только что нарисовал один кадр и готов к следующему, просто ждет подходящее время). Поскольку сообщения добавляются в очередь непредсказуемым образом, метод MessageQueue.next
(в котором вызывается nativePollOnce
) активно проверяет новые сообщения, в которых используются циклы ЦП.
Вывод:
Вы не должны беспокоиться о nativePollOnce
. Он просто указывает, что обработка всех сообщений завершена, и поток ждет следующего. Ну, это просто означает, что вы не уделяете слишком много внимания своей основной теме;)
Похож на оживленный ожидание. Ответ заключается не в том, чтобы использовать опрос. Вы не опубликовали какой-либо код или другую информацию о своем приложении. – chrylis
Что вы подразумеваете под занятым-ожидают? –