Krótka odpowiedź:
Sposób nativePollOnce
służy do "czekać" do następnego Message
stanie się dostępny. Jeśli czas spędzony w trakcie tego połączenia jest długi, wątek główny (UI) nie ma żadnej rzeczywistej pracy i czeka na następne zdarzenia do przetworzenia. Nie musisz się o to martwić.
Objaśnienie:
Ponieważ „głównym” wątku jest odpowiedzialny za opracowanie interfejsu i obsługi różnych imprez, to Runnable
ma pętli, który przetwarza wszystkie te wydarzenia. Pętla jest zarządzana przez Looper
, a jej zadanie jest dość proste: przetwarza wszystkie wiadomości w numerze MessageQueue
.
Adres A Message
jest dodawany do kolejki, na przykład w odpowiedzi na zdarzenia wejściowe, wywołania zwrotnego renderowania ramki lub nawet własne połączenia Handler.post
. Czasami główny wątek nie ma żadnej pracy (tzn. Brak wiadomości w kolejce), co może się zdarzyć np. zaraz po zakończeniu renderowania pojedynczej klatki (nić właśnie narysowała jedną ramkę i jest gotowa na następną, po prostu czeka na odpowiedni czas). Ponieważ komunikaty są dodawane do kolejki w nieprzewidywalny sposób, metoda MessageQueue.next
(w której jest wywoływana nativePollOnce
) aktywnie sprawdza nowe komunikaty, które używają cykli procesora.
Wniosek:
Nie należy martwić nativePollOnce
. Wskazuje tylko, że przetwarzanie wszystkich wiadomości zostało zakończone, a wątek czeka na następny. Cóż, to oznacza, że nie powierzasz zbyt wiele pracy głównemu wątkowi;)
Wygląda na pracowitego oczekiwania. Odpowiedź nie polega na użyciu odpytywania. Nie zamieściłeś żadnego kodu ani innych informacji o swojej aplikacji. – chrylis
co masz na myśli przez pracowite czekanie? –