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 (
>16msi>700ms) spowodowane kosztownymi układami, przekazywaniem danych lub zablokowaniem wątku głównego. - Powolne sesje (tylko gry):
mierz szybkość klatek za pomocą
SurfaceFlingeri 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ą
- Procesy LMK (Low Memory Killers): dowiedz się, jak demon LMK (
lmkd) w Androidzie ustala priorytety procesów za pomocąoom_adj_scorei profiluje wykorzystanie pamięci w Android Studio, Unity i Unreal Engine. - Wykorzystanie pamięci (anonimowa pamięć RSS i przestrzeń wymiany): mierz i zmniejszaj anonimowy rozmiar zbioru roboczego (RSS) i przestrzeń wymiany aplikacji w stanach pierwszego planu, usługi i tła.
- Wykorzystanie pamięci przez bitmapy: diagnozuj zbyt duże lub wyciekające przydziały bitmap i zwalniaj bufory graficzne, gdy komponenty interfejsu użytkownika przechodzą w tło.
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
WorkManagerlubJobScheduler. - 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ą
WorkManagerograniczeń. - 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.