Jeśli na Androidzie 11 lub starszym użyjesz niestandardowego ekranu powitalnego, przenieś aplikację do interfejsu API SplashScreen
, aby zapewnić jej prawidłowe wyświetlanie na Androidzie 12 i nowszych.
Od Androida 12 system stosuje domyślne powitanie systemu Android
Ekran włączony
zimno i ciepło
uruchamia się w przypadku wszystkich aplikacji. Domyślnie ten ekran powitalny systemu jest tworzony za pomocą elementu ikony w programie uruchamiającym aplikację oraz windowBackground
motywu, jeśli jest on w jednym kolorze.
Jeśli tego nie zrobisz, będzie można uruchamiać ją na Androidzie 12 lub może później ulec pogorszeniu lub przynieść niezamierzone efekty.
Jeśli Twój obecny ekran powitalny został zaimplementowany za pomocą motyw niestandardowy, który zastępuje
android:windowBackground
, system zastąpi niestandardowy ekran powitalny domyślnym systemem Android ekranu powitalnego na Androidzie 12 i nowszych. Może to nie być zamierzone działanie aplikacji.Jeśli istniejący ekran powitalny jest zaimplementowany za pomocą dedykowanego
Activity
, uruchomienie aplikacji na urządzeniach z Androidem 12 lub nowszym spowoduje wyświetlenie zduplikowanego ekranu powitalnego: najpierw ekran powitalny systemu, a następnie aktywność ekranu powitalnego.
Aby temu zapobiec, możesz wykonać opisane w tym dokumencie. Po migracji interfejs API skróci czas uruchamiania, zapewni Ci pełną kontrolę nad ekranem powitalnym i zapewni bardziej spójne wrażenia podczas uruchamiania w porównaniu z innymi aplikacjami na platformie.
Biblioteka SplashScreen kompatybilna z:
Możesz używać interfejsu API SplashScreen
bezpośrednio, ale zdecydowanie zalecamy użycie interfejsu
Biblioteka kompatybilna z Androidem SplashScreen
. Biblioteka zgodności korzysta z interfejsu API SplashScreen
, umożliwia zgodność wsteczną i tworzy spójny wygląd ekranu powitalnego we wszystkich wersjach Androida. Ten dokument jest napisany w kompatybilnym
bibliotece.
Jeśli przeprowadzisz migrację bezpośrednio za pomocą interfejsu API SplashScreen
, na Androidzie 11 lub starszym Twój ekran powitalny będzie wyglądał tak samo jak przed migracją. Data rozpoczęcia:
Ekran powitalny w Androidzie 12 ma wygląd i styl Androida 12.
Jeśli przeprowadzisz migrację za pomocą biblioteki zgodnej SplashScreen
, system wyświetli
ten sam ekran powitalny na wszystkich wersjach Androida.
Migracja implementacji ekranu powitalnego
Aby przenieść istniejący ekran powitalny: w Androidzie 12 i nowszych.
Ta procedura dotyczy każdego typu implementacji, z którego przeprowadzasz migrację. Jeśli migrujesz z dedykowanego Activity
, postępuj zgodnie ze sprawdzonymi metodami opisanymi w tym dokumencie, aby dostosować niestandardowy ekran powitalny Activity
. Interfejs SplashScreen
API ogranicza też uruchamianie
związane z czasem oczekiwania dzięki dedykowanej aktywności na ekranie powitalnym.
Aby przenieść ekran powitalny:
W pliku
build.gradle
zmodyfikuj elementcompileSdkVersion
i uwzględnij bibliotekę kompatybilnościSplashScreen
w zależnościach.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
Utwórz motyw z elementem nadrzędnym:
Theme.SplashScreen
. Ustaw wartość argumentupostSplashScreenTheme
do motywu, którego musi używaćActivity
, a atrybut wartośćwindowSplashScreenAnimatedIcon
na obiekt rysowalny lub animowany, obiekt rysowalny. Pozostałe atrybuty są opcjonalne.<style name="Theme.App.Starting" parent="Theme.SplashScreen"> <!-- Set the splash screen background, animated icon, and animation duration. --> <item name="windowSplashScreenBackground">@color/...</item> <!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animated drawable. One of these is required. --> <item name="windowSplashScreenAnimatedIcon">@drawable/...</item> <!-- Required for animated icons. --> <item name="windowSplashScreenAnimationDuration">200</item> <!-- Set the theme of the Activity that directly follows your splash screen. This is required. --> <item name="postSplashScreenTheme">@style/Theme.App</item> </style>
Jeśli chcesz dodać kolor tła pod ikoną, możesz użyć przycisku
Theme.SplashScreen.IconBackground
i ustaw ten motywwindowSplashScreenIconBackground
.W pliku manifestu zastąp motyw początkowej aktywności motywem, którego używasz. utwórz w poprzednim kroku.
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...
Zanim zadzwonisz do
super.onCreate()
, wywołaj funkcjęinstallSplashScreen
w pierwszym ćwiczeniu.Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { // Handle the splash screen transition. val splashScreen = installSplashScreen() super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) ...
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // Handle the splash screen transition. SplashScreen splashScreen = SplashScreen.installSplashScreen(this); super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); } }
installSplashScreen
zwraca obiekt ekranu powitalnego, który możesz opcjonalnie
służy do dostosowywania animacji lub do wyświetlania ekranu powitalnego przez dłuższy czas
czas trwania kampanii. Więcej informacji o dostosowywaniu animacji znajdziesz w sekcji
Wyświetlaj ekran powitalny przez dłuższy czas
oraz
Dostosuj animację zamykającą ekran powitalny
Dostosowywanie niestandardowej aktywności ekranu powitalnego do ekranu powitalnego
Po migracji na ekran powitalny w Androidzie 12 i nowszych wersjach zdecyduj, co zrobić z poprzednim niestandardowym ekranem powitalnym.Activity
Możesz:
- Zachowaj niestandardową aktywność, ale zablokuj jej wyświetlanie.
- Zachowaj niestandardową aktywność ze względu na elementy budujące markę.
- Usuń tę aktywność i dostosuj aplikację według potrzeb.
zapobiega wyświetlaniu niestandardowej aktywności;
Jeśli poprzedni ekran powitalny Activity
służy głównie do kierowania, zastanów się, czy nie usunąć go. Możesz na przykład bezpośrednio połączyć się z daną aktywnością lub przejść do pojedynczej aktywności z podelementami. Jeśli tak nie jest
możesz użyć funkcji
SplashScreen.setKeepOnScreenCondition
, aby pozostawiać aktywność routingu na swoim miejscu, ale zatrzymać renderowanie. Robię to
przenosi ekran powitalny do następnego działania i wspomaga płynne
i przejścia z sieci.
Kotlin
class RoutingActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() super.onCreate(savedInstanceState) // Keep the splash screen visible for this Activity. splashScreen.setKeepOnScreenCondition { true } startSomeNextActivity() finish() } ...
Java
public class RoutingActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { SplashScreen splashScreen = SplashScreen.installSplashScreen(this); super.onCreate(savedInstanceState); // Keep the splash screen visible for this Activity. splashScreen.setKeepOnScreenCondition(() -> true ); startSomeNextActivity(); finish(); } ...
Zachowanie aktywności niestandardowej na potrzeby brandingu
Jeśli ze względów związanych z marką chcesz użyć poprzedniego ekranu powitalnego Activity
, możesz przejść z systemowego ekranu powitalnego na niestandardowy ekran powitalny Activity
, dostosowując animację zamykania ekranu powitalnego.
Lepiej jednak w miarę możliwości unikać takich sytuacji i korzystać z tagu SplashScreen
Interfejs API do promowania marki na ekranie powitalnym.
Jeśli chcesz wyświetlić ekran dialogowy, zalecamy wyświetlanie go na kolejnym niestandardowym ekranie powitalnym lub na ekranie głównym po ekranie powitalnym systemu.
Usuń niestandardowy ekran powitalny z aktywności
Ogólnie zalecamy usunięcie poprzedniego niestandardowego ekranu powitalnego (Activity
)
całkowicie uniknąć powielania ekranów powitalnych i zwiększyć wydajność,
oraz skrócenie czasu wczytywania ekranu powitalnego. Istnieją różne techniki, których możesz użyć, aby uniknąć wyświetlania zbędnych czynności na ekranie powitalnym.
Używaj leniwego wczytywania komponentów, modułów lub bibliotek. Unikaj wczytywania lub inicjowanie komponentów lub bibliotek, które nie są wymagane do jak i w przyszłości. wczytywać je później, gdy aplikacja ich potrzebuje.
Jeśli aplikacja naprawdę potrzebuje komponentu do prawidłowego działania, wczytaj go tylko wtedy, gdy jest to naprawdę konieczne, a nie w momencie uruchamiania. Możesz też użyć wątku w tle do jego wczytania po uruchomieniu aplikacji. Staraj się, aby plik
Application.onCreate()
był jak najmniejszy.Możesz też użyć biblioteki uruchamiania aplikacji do inicjowania komponentów podczas uruchamiania aplikacji. Pamiętaj, aby nadal wczytywać wszystkie wymagane moduły dla początkowej aktywności i nie wprowadzać zacięć, gdy wczytywane z opóźnieniem moduły staną się dostępne.
Utwórz placeholder podczas wczytywania niewielkiej ilości danych na komputerze. Użyj zalecane podejście do tematyki i wstrzymywanie renderowania do czasu, aż aplikacja gotowe. Aby wdrożyć ekran powitalny z wsteczną kompatybilnością, wykonaj czynności opisane w artykule Utrzymywanie ekranu powitalnego na ekranie przez dłuższy czas.
Pokaż obiekty zastępcze. W przypadku obciążeń sieciowych o nieokreślonym czasie trwania zamknij ekran powitalny i pokaż obiekty zastępcze dla wczytywania asynchronicznego. Zastanów się, czy warto zastosować subtelne animacje w obszarze treści, które odzwierciedlają stan wczytywania. Upewnij się, że struktura wczytanej treści odpowiada struktura szkieletowa a także zapewnić płynne przejście po załadowaniu treści.
Używaj buforowania. Gdy użytkownik otwiera aplikację po raz pierwszy, możesz wyświetlać wskaźniki wczytywania dla niektórych elementów interfejsu, jak pokazano na poniższym rysunku. następnym razem, gdy użytkownik wróci do aplikacji, możesz wyświetlić tę zawartość z pamięci podręcznej wczytują się nowsze treści.