Profilowanie układu za pomocą przeglądarki hierarchii

Przeglądarka hierarchii została wycofana. Jeśli korzystasz z Androida Studio w wersji 3.1 lub nowszej, do sprawdzania hierarchii widoków aplikacji w czasie działania lepiej użyj Inspektora układu. Aby profilować szybkość renderowania układu aplikacji, użyj parametru Window.OnFrameMetricsAvailableListener, jak opisano w tym poście na blogu.

Przeglądarka hierarchii to narzędzie wbudowane w Monitorowanie urządzeń z Androidem, które umożliwia pomiar szybkości układu w każdym widoku w hierarchii układu. Pomaga znaleźć wąskie gardła wydajności spowodowane przez strukturę hierarchii widoków.

Uwaga: przeglądarka hierarchii hierarchii nie jest już rozwijana. Aby sprawdzać właściwości w hierarchii widoków w czasie działania, użyj Inspektora układu w Android Studio. Jednak Inspektor układu nie udostępnia obecnie szczegółów profilowania wydajności układu.

Ta strona zawiera wprowadzenie do przeglądarki hierarchii oraz przewodnik po profilowaniu układu.

Konfiguracja

Jeśli używasz emulatora Androida, możesz pominąć tę sekcję. W przeciwnym razie musisz skonfigurować urządzenie w ten sposób.

Uwaga: na urządzeniu musi być zainstalowany Android 4.1 lub nowszy.

  1. Włącz na urządzeniu Opcje programisty.
  2. Ustaw zmienną środowiskową ANDROID_HVPROTO=ddm na komputerze programisty.

    Ta zmienna informuje przeglądarkę hierarchii, że łączy się z urządzeniem za pomocą protokołu ddm, który jest taki sam jak protokół DDMS. Uwaga: na hoście, który łączy się z urządzeniem, może istnieć tylko jeden proces, więc musisz zamknąć każdą inną sesję DDMS, aby uruchomić przeglądarkę hierarchii.

Uruchom przeglądarkę hierarchii

Rysunek 1. Monitor urządzeń z Androidem

  1. Podłącz urządzenie do komputera. Jeśli na urządzeniu pojawi się okno z pytaniem Zezwolić na debugowanie USB?, kliknij OK.
  2. Otwórz swój projekt w Android Studio, utwórz go i uruchom na urządzeniu.
  3. Uruchom Android Device Monitor. Android Studio może wyświetlać okno Wyłącz integrację adb, ponieważ tylko jeden proces może połączyć się z urządzeniem przez adb naraz, a Android Device Monitor prosi o połączenie. Kliknij Tak.

    Rysunek 1 przedstawia widok początkowo wyświetlany w Monitorze urządzeń z Androidem.

  4. Na pasku menu kliknij kolejno Okno > Otwórz Perspective i Widok hierarchii.

    Układ powinien być podobny do tego przedstawionego na ilustracji 2. Jeśli nie, kliknij Okno > Resetuj Perspective, aby powrócić do układu domyślnego.

  5. Na karcie Windows po lewej stronie kliknij dwukrotnie nazwę pakietu aplikacji. Spowoduje to wypełnienie paneli hierarchią widoków aplikacji.

Poznaj narzędzia

Rysunek 2. Okienko podglądu hierarchii.

W przeglądarce hierarchii znajdują się następujące panele (jak widać na ilustracji 2):

  • Widok drzewa (na środku): widok drzewa w hierarchii widoków. Drzewo możesz przeciągać i powiększać za pomocą myszy i elementu sterującego powiększeniem u dołu ekranu. Każdy węzeł wskazuje na nazwę klasy View i identyfikator.
  • Przegląd drzewa (w prawym górnym rogu): zapewnia widok całej hierarchii widoków aplikacji z lotu ptaka. Przesuń szary prostokąt, aby zmienić widoczny obszar widoczny w widoku drzewa.
  • Widok układu (na dole po prawej): pokazuje schemat układu. Kontur wybranego widoku jest czerwony, a jego widok nadrzędny – jasnoczerwony.

    Kliknięcie widoku w tym miejscu powoduje też jego wybranie w widoku drzewa i odwrotnie.

Hierarchia widoków danych to migawka układu, więc nie jest automatycznie aktualizowana. Aby zaktualizować widok hierarchii, kliknij Załaduj ponownie hierarchię widoków .

Aby unieważnić widok (zażądać wywołania systemowego onDraw() podczas następnej aktualizacji układu), wybierz widok w hierarchii i kliknij Unieważnij układ (odpowiada to wywołaniu elementu invalidate() w widoku). Aby poprosić o rzeczywisty układ widoku (i jego elementów podrzędnych), kliknij Poproś o układ .

Jeśli przejdziesz do innej aplikacji, musisz ją wybrać na karcie Windows w panelu po lewej stronie, aby wyświetlić jej hierarchię widoków.

Aby wyświetlić szczegółowe informacje o widoku, w tym jego pomiar, układ i czasy rysowania (jak widać na ilustracji 3), kliknij dany widok w widoku drzewa. Kliknij dwukrotnie widok, aby wyświetlić jego powiększony obraz.

Rysunek 3. Wyświetlane są części węzła widoku.

Aby wyświetlić właściwości widoku, kliknij w panelu po lewej kartę Właściwości widoku, jak pokazano na rysunku 4.

Rysunek 4. Lokalizacja karty View Właściwości.

Aby zapisać warstwowy zrzut ekranu układu w pliku Adobe Photoshop (PSD), kliknij Przechwyć warstwy okien na pasku narzędzi. Każdy widok jest zapisywany jako osobna warstwa, więc możesz łatwo utworzyć nową makietę, ukrywając i dostosowując każdy z nich.

Profilowanie układu

Rysunek 5. Wyświetl hierarchię po profilowaniu.

Teraz już wiesz, jak korzystać z narzędzia, możesz więc wykorzystać je do profilowania hierarchii wyświetlania i interpretowania wyników.

  1. W Widoku drzewa lub Widoku układu kliknij węzeł widoku, którego elementy podrzędne chcesz profilować.
  2. Aby rozpocząć profilowanie, kliknij Uzyskaj czasy układu w górnej części widoku drzewa.

    W przypadku dużych hierarchii widoków profilowanie może potrwać kilka sekund.

Każdy widok podrzędny wybranego węzła otrzymuje 3 kropki (zielone, żółte lub czerwone).

  • Kropka po lewej stronie oznacza proces rysowania potoku renderowania.
  • Środkowa kropka reprezentuje fazę układu.
  • Prawa kropka reprezentuje fazę wykonania.

Rysunek 6. Jak kolorowe kropki są powiązane
z procesem renderowania.

Kropki odpowiadają w przybliżeniu fazom pomiaru, układu i rysowania w przetwarzaniu. Kolor kropek wskazuje względną wydajność tego węzła w stosunku do wszystkich innych węzłów profilowanych w rodzinie lokalnej.

  • Zielony oznacza, że widok renderuje się szybciej niż co najmniej połowa innych widoków.
  • Żółty oznacza, że widok renderuje się szybciej niż jego dolna połowa.
  • Czerwony oznacza, że wyświetlenie należy do najwolniejszych wyświetleń.

Interpretacja wyników

Wyświetlający hierarchię mierzy wydajność każdego węzła w stosunku do widoków równorzędnych, więc w profilu zawsze występują węzły czerwone, chyba że wszystkie widoki działały identycznie. Nie musi to oznaczać, że czerwony jest mało wydajny (tylko że jest najwolniejszym widokiem w lokalnej grupie widoków).

Wyświetlający hierarchię rasteryzuje układ, aby uzyskać informacje o czasie. Rasteryzacja to proces przekształcania obiektu podstawowego (np. okręgu lub czcionki wektorowej) w piksele na ekranie. Rasteryzacja jest zwykle przeprowadzana przez GPU urządzenia, ale w przypadku rasteryzacji programowej renderowanie jest wykonywane na procesorze za pomocą zwykłego oprogramowania. Oznacza to, że bezwzględne czasy w raportach są poprawne względem siebie, ale są one duże i różnią się w zależności od ogólnego i zmieniającego się obciążenia procesora na urządzeniu i komputerze. Nie odzwierciedla więc rzeczywistej szybkości działania na urządzeniu i należy profilować kilka razy, aby zorientować się w średnich pomiarach.

Czerwony węzeł stanowi potencjalny problem w każdej sytuacji, w której aplikacja działa nieoczekiwanie wolniej. W ustawieniu względnym zawsze występuje najwolniejszy węzeł. Upewnij się tylko, że jest to ten, którego oczekujesz. Poniższe przykłady pokazują, jak interpretować czerwone kropki.

  • Szukaj czerwonych kropek w węzłach liści lub wyświetl grupy z niewielką liczbą dzieci. Może to oznaczać problem. Aplikacja może nie działać wolno lub nie na urządzeniu, ale warto wiedzieć, dlaczego ta kropka ma kolor czerwony. Dodatkowe informacje możesz uzyskać w usługach Systrace i Traceview.
  • Jeśli masz grupę widoków danych z wieloma elementami podrzędnymi i czerwoną fazę pomiaru, przyjrzyj się dzieciom, aby zobaczyć, jak sobie radzą.
  • Widok z żółtymi, a nawet czerwonymi punktami może nie działać wolno na urządzeniu. W tym przypadku pomocne są rzeczywiste liczby. Dodatkowe informacje możesz uzyskać w usługach Systrace i Traceview.
  • Jeśli widok główny hierarchii zawiera fazę wskaźnika czerwonej, fazę układu czerwonego i żółtą fazę rysowania, jest to dość typowe, ponieważ jest to widok nadrzędny wszystkich innych widoków, a jego układ nie jest zakończony, dopóki nie zostaną ukończone wszystkie jego elementy podrzędne.
  • Jeśli węzeł liścia w drzewie z ponad 20 widokami ma czerwoną fazę rysowania, jest to problem. Sprawdź, czy w metodzie onDraw() nie ma kodu, który powinien się tam znajdować.

Więcej wskazówek dotyczących układu strony znajdziesz w artykule Zwiększanie wydajności układu.