2016-08-07 8 views
9

wiem wątki mieć kolejkę komunikatów i koparki naciskać runnables lub wiadomości na to, ale kiedy mój profil android Android App użyciu narzędzi typu studio znajduje się następujący proces:android - co jest ankietą macierzystą kolejki wiadomości raz na Androida?

android.os.MessageQueue.nativePollOnce

, który wykorzystuje procesor bardziej niż inne. Co to jest i jak mogę zredukować czas, jaki CPU na to poświęca? tutaj jest wynikiem obraz narzędzia profiler

enter image description here

+1

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

+0

co masz na myśli przez pracowite czekanie? –

Odpowiedz

12

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;)

Powiązane problemy