Sprawdzone metody optymalizacji aplikacji

Poniższe sprawdzone metody pomogą Ci zoptymalizować aplikację bez negatywnego wpływu na jej jakość.

Użyj profili podstawowych

Profile bazowe mogą zwiększyć szybkość wykonywania kodu o 30% od pierwszego uruchomienia i sprawić, że wszystkie interakcje użytkowników, takie jak uruchamianie aplikacji, poruszanie się między ekranami czy przewijanie treści, są płynniejsze już od pierwszego uruchomienia. Przyspieszenie działania aplikacji i zwiększenie czasu reagowania na nią przekłada się na większą liczbę aktywnych użytkowników dziennie i wyższy średni współczynnik powtórnych wizyt.

Użyj profilu uruchamiania

Profil startowy jest podobny do profilu podstawowego, ale jest uruchamiany w czasie kompilacji, aby zoptymalizować układ DEX i przyspieszyć uruchamianie aplikacji.

Korzystanie z biblioteki uruchamiania aplikacji

Biblioteka uruchamiania aplikacji umożliwia definiowanie inicjatorów komponentów współużytkowanych przez jednego dostawcę treści zamiast definiowania osobnych dostawców treści dla każdego komponentu, który chcesz zainicjować. Może to znacznie skrócić czas uruchamiania aplikacji.

Leniwe ładowanie bibliotek i wyłączanie automatycznego inicjowania

Aplikacje używają wielu bibliotek, z których niektóre mogą być obowiązkowe podczas uruchamiania. W wielu bibliotekach jest jednak wiele bibliotek, w których inicjowanie może zostać opóźnione do czasu wyrenderowania pierwszej klatki. Niektóre biblioteki mają opcję wyłączenia automatycznego inicjowania podczas uruchamiania lub inicjowania na żądanie. Użyj tej opcji, aby opóźnić inicjowanie do momentu, aż będzie to konieczne w celu zwiększenia wydajności. Możesz na przykład użyć inicjowania na żądanie, aby wywołać WorkManager tylko wtedy, gdy komponent jest wymagany.

Korzystanie z ViewStub

ViewStub to niewidoczny, zerowy rozmiar View, który umożliwia leniwe zwiększanie zasobów układu w czasie działania. Pozwala to na później opóźnić zwiększenie liczby wyświetleń, które nie są konieczne na początku.

Jeśli używasz Jetpack Compose, możesz uzyskać podobny efekt jak w przypadku klasy ViewStub do opóźniania wczytywania niektórych komponentów:

var shouldLoad by remember {mutableStateOf(false)}

if (shouldLoad) {
   MyComposable()
}

Wczytaj elementy kompozycyjne wewnątrz bloku warunkowego, modyfikując shouldLoad:

LaunchedEffect(Unit) {
   shouldLoad = true
}

Powoduje to zmianę kompozycji polegającej na umieszczaniu kodu wewnątrz bloku warunkowego w pierwszym fragmencie.

Zoptymalizuj ekran powitalny

Ekrany powitalne to ważny element uruchamiania aplikacji, a dobrze zaprojektowany ekran powitalny ułatwia uruchamianie aplikacji. Android 12 (poziom interfejsu API 31) i nowsze mają ekran powitalny zaprojektowany z myślą o zwiększeniu wydajności. Więcej informacji znajdziesz w sekcji Ekran powitalny.

Używaj skalowalnych typów obrazów

W przypadku obrazów zalecamy używanie elementów rysunkowych wektorowych. Jeśli to niemożliwe, używaj obrazów WebP. WebP to format obrazu, który zapewnia bezstratną i stratną kompresję obrazów w internecie. Istniejące obrazy w formacie BMP, JPG, PNG lub statyczne pliki GIF możesz przekonwertować na format WebP za pomocą Android Studio. Więcej informacji znajdziesz w artykule o tworzeniu obrazów WebP.

Dodatkowo zmniejsz liczbę i rozmiar obrazów wczytywanych podczas uruchamiania.

Używaj interfejsów Performance API

Interfejs API wydajności do odtwarzania multimediów jest dostępny na urządzeniach z Androidem 12 (poziom API 31) i nowszymi. Dzięki niemu możesz poznać możliwości urządzeń i odpowiednio wykonywać operacje.

Nadaj priorytet śladom uruchomienia „na zimno”

„zimny start” oznacza, że aplikacja zaczyna się od zera. Oznacza to, że proces systemu nie utworzył jeszcze procesu aplikacji. Aplikacja zwykle uruchamia się „na zimno”, gdy uruchamia się po raz pierwszy od momentu uruchomienia urządzenia lub od momentu wymuszenia jej zatrzymania przez system. Uruchamianie „na zimno” jest znacznie wolniejsze, ponieważ aplikacja i system muszą wykonywać więcej zadań, które nie są wymagane w przypadku innych typów uruchamiania – takich jak uruchomienia z pamięci i z pamięci. Śledzenie systemu w przypadku startupów „na zimno” daje lepszy wgląd w wydajność aplikacji.