2015-02-03 15 views
26

Niedawno uruchomiłem sesję śledzenia metod w procesie otwierania programu FragmentActivity, który otwiera około 750-1000 ms z poprzedniego działania i ma ListView, do którego wczytuje początkową partię danych w czasie, który różni się od tak niskiego poziomu. ("low") jak 1500ms aż do 5000ms. Po sortowaniu według "czasu wyłączności" zauważyłem, że metoda o nazwie android.os.MessageQueue.next zajmuje wiele czasu.android.os.MessageQueue.next podejmowanie mnogości ekskluzywnego czasu - czy to normalne zachowanie?

Widok wszystkich głównych wątków po sesji śledzenia metod. Zauważ android.os.MessageQueue.next jest pierwszy na liście:

A view of all the threads after a method tracing session

Teraz moje pytanie jest takie jak: jest to standardowa procedura operacyjna w aplikacji Android - czyli robi android.os.MessageQueue.next odnoszą się do głównego kolejce czeka na kolejną operację ? Czy może na przemian oznacza to tymczasowy impas?

Czy powinienem się martwić?

+1

Czy stworzył żadnego handlerthread wewnątrz kodu i wykorzystanie go w fazie początkowej? – 7383

+0

Tak, używam biblioteki, która to robi. @ 7383 – Karim

Odpowiedz

1

Jeśli używasz wątku obsługi, mam nadzieję, że coś poszło nie tak. Widziałem te linie w kodzie źródłowym kolejnej metody MessageQueue. Spójrz, może to pomóc w zrozumieniu.

** Wiadomość następna() {// Wróć tutaj, jeśli pętla komunikatów została już zamknięta i została usunięta. // Może się to zdarzyć, jeśli aplikacja spróbuje ponownie uruchomić przechwycenie po zakończeniu //, które nie jest obsługiwane. **

Source code

+1

Co może pójść nie tak? Mam ten sam problem –

Powiązane problemy