Rozwiązywanie typowych problemów z wydajnością

Aby zapewnić płynne, stabilne i energooszczędne działanie aplikacji, musisz zidentyfikować i wyeliminować typowe wąskie gardła wydajności w zakresie stabilności, renderowania interfejsu, zużycia pamięci, pracy w tle, opóźnienia uruchamiania i optymalizacji kompilacji.

Przewodniki w tej sekcji wyjaśniają podstawowe zachowania platformy Android w przypadku każdego rodzaju problemu i pokazują, jak je diagnozować, profilować i rozwiązywać za pomocą narzędzi takich jak Profiler Android Studio, Perfetto, Logcat i ApplicationExitInfo.

Stabilność

  • Błędy ANR: diagnozuj i naprawiaj błędy typu „Aplikacja nie odpowiada” (ANR) spowodowane przez zablokowane wątki interfejsu, operacje wejścia-wyjścia w głównym wątku, konflikty blokad lub powolne odbiorniki transmisji.
  • Awarie: czytaj zrzuty stosu, sprawdzaj dane wyjściowe Logcat oraz zapobiegaj nieobsługiwanym wyjątkom i sygnałom natywnym.

Renderowanie i uruchamianie

  • Powolne renderowanie: identyfikuj i naprawiaj utracone lub zablokowane klatki interfejsu (>16ms>700ms) spowodowane kosztownymi układami, przekazywaniem danych lub zablokowaniem wątku głównego.
  • Powolne sesje (tylko gry): mierz szybkość klatek za pomocą SurfaceFlinger i optymalizuj liczbę klatek w grze za pomocą Android Frame Pacing (Swappy), Vulkan i Android Dynamic Performance Framework (ADPF).
  • Czas uruchomienia aplikacji: poznaj szczegóły uruchamiania aplikacji „na zimno”, „na ciepło” i z pamięci, mierz czas do pierwszego wyświetlenia (TTID) i czas do pełnego wyświetlenia (TTFD) oraz optymalizuj uruchamianie.

Zarządzanie pamięcią

Bateria i praca w tle

  • Nadmierne blokady uśpienia: unikaj utrzymywania częściowych blokad uśpienia przez dłuższy czas i przenoś zadania w tle do WorkManager lub JobScheduler.
  • Ciągłe częściowe blokady uśpienia: upewnij się, że każda uzyskana częściowa blokada uśpienia jest prawidłowo zwalniana na wszystkich ścieżkach wykonania i błędów.
  • Zbyt częste wybudzenia: zmniejsz liczbę wybudzeń spowodowanych przez alarm precyzyjny i grupuj lub odraczaj zaplanowane zadania w tle.
  • Nadmierna liczba skanowań Wi-Fi w tle: zminimalizuj częstotliwość skanowania Wi-Fi w tle i używaj pasywnych lub zbiorczych interfejsów API lokalizacji i łączności.
  • Nadmierne użycie sieci w tle: grupuj i odraczaj transfery w tle w sieci komórkowej za pomocą WorkManager ograniczeń.
  • Nadmierne wykorzystanie baterii: diagnozowanie szybkiego zużycia baterii na urządzeniach mobilnych i urządzeniach z Wear OS przez profilowanie aktywności procesora, czujnika i radia.

Uprawnienia i optymalizacja kompilacji

  • Odmowy przyznania uprawnień: proś o uprawnienia w czasie działania aplikacji w odpowiednim kontekście i jasno wyjaśniaj użytkownikom, dlaczego są one potrzebne.
  • Optymalizacja kodu DEX: skonfiguruj reguły zmniejszania, zaciemniania i optymalizacji R8, aby zmniejszyć rozmiar plików DEX i zwiększyć wydajność środowiska wykonawczego.