Jeśli wdrożysz niestandardowy ekran powitalny na Androidzie 11 lub starszym, przenieś aplikację do interfejsu API SplashScreen
, aby mieć pewność, że wyświetla się prawidłowo na Androidzie 12 i nowszych.
Począwszy od Androida 12 system stosuje domyślny ekran powitalny przy uruchomieniu „na zimno” i uruchomieniu częściowo z pamięci wszystkich aplikacji. Domyślnie ten systemowy ekran powitalny tworzy się przy użyciu elementu ikony Menu z aplikacjami i elementu windowBackground
motywu (jeśli jest w jednym kolorze).
Jeśli nie przeniesiesz swojej aplikacji, sposób jej uruchamiania na Androidzie 12 i późniejszym czasie może działać gorzej lub mieć niezamierzone efekty.
Jeśli istniejący ekran powitalny jest zaimplementowany z wykorzystaniem motywu niestandardowego, który zastępuje
android:windowBackground
, na Androidzie 12 i nowszych system zastąpi niestandardowy ekran powitalny domyślnym ekranem powitalnym Androida. Może to nie być przeznaczona dla Twojej aplikacji.Jeśli istniejący ekran powitalny jest zaimplementowany za pomocą dedykowanego
Activity
, uruchomienie aplikacji na urządzeniach z Androidem 12 lub nowszym spowoduje zduplikowanie ekranu powitalnego – pojawi się ekran powitalny, po którym pojawi się aktywność na ekranie powitalnym.
Możesz temu zapobiec, wykonując proces migracji opisany w tym dokumencie. Po migracji interfejs API skraca czas uruchamiania, daje pełną kontrolę nad ekranem powitalnym i zapewnia większą spójność podczas uruchamiania z innymi aplikacjami na platformie.
Biblioteka kompatybilna SplashScreen
Możesz używać interfejsu API SplashScreen
bezpośrednio, ale zdecydowanie zalecamy korzystanie z biblioteki zgodnej z Androidx SplashScreen
. Biblioteka kompatybilna korzysta z interfejsu API SplashScreen
, zapewnia zgodność wsteczną oraz zapewnia spójny wygląd i sposób działania ekranu powitalnego we wszystkich wersjach Androida. Napisać ten dokument
za pomocą biblioteki kompatybilnej.
Jeśli przenosisz dane bezpośrednio za pomocą interfejsu API SplashScreen
, na Androidzie 11 i starszych wersjach ekran powitalny będzie wyglądać dokładnie tak samo jak przed migracją. Od Androida 12 ekran powitalny ma wygląd i styl Androida 12.
Jeśli przeprowadzisz migrację za pomocą biblioteki zgodnej z SplashScreen
, system będzie wyświetlać ten sam ekran powitalny we wszystkich wersjach Androida.
Migracja implementacji ekranu powitalnego
Aby przenieść obecną implementację ekranu powitalnego na Androida 12 lub nowszego, wykonaj te czynności.
Ta procedura ma zastosowanie w przypadku każdego typu implementacji, z którego przenosisz dane. Jeśli przeprowadzasz migrację z dedykowanego Activity
, postępuj zgodnie ze sprawdzonymi metodami opisanymi w tym dokumencie, aby dostosować Activity
do niestandardowego ekranu powitalnego. Interfejs SplashScreen
API skraca też czas oczekiwania na uruchomienie spowodowany przez dedykowaną aktywność na ekranie powitalnym.
Aby przenieść ekran powitalny:
W pliku
build.gradle
zmieńcompileSdkVersion
i uwzględnij bibliotekę kompatybilnąSplashScreen
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śćpostSplashScreenTheme
na motyw, którego musi używaćActivity
, oraz wartośćwindowSplashScreenAnimatedIcon
jako obiekt rysowalny lub animowany. 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ć motywu
Theme.SplashScreen.IconBackground
i ustawić atrybutwindowSplashScreenIconBackground
.W pliku manifestu zastąp motyw początkowej aktywności motywem utworzonym w poprzednim kroku.
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...
Wywołaj
installSplashScreen
w początkowej aktywności, zanim zadzwoniszsuper.onCreate()
.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órego możesz opcjonalnie użyć do dostosowania animacji lub do wyświetlania tego ekranu przez dłuższy czas. Więcej informacji o dostosowywaniu animacji znajdziesz w artykułach o umieszczaniu ekranu powitalnego na ekranie przez dłuższy czas i dostosowywaniu animacji po jego zamknięciu.
Dostosuj spersonalizowaną aktywność na ekranie powitalnym do ekranu powitalnego
Po przejściu na ekran powitalny Androida 12 i nowszych zdecyduj, co zrobić z poprzednim niestandardowym ekranem powitalnym Activity
. Masz do wyboru te opcje:
- Zachowaj niestandardową aktywność, ale zablokuj jej wyświetlanie.
- Zachowaj niestandardową aktywność na potrzeby promowania marki.
- Usuń tę aktywność i dostosuj aplikację według potrzeb.
Zapobiegaj wyświetlaniu się niestandardowej aktywności
Jeśli poprzedni ekran powitalny Activity
jest używany głównie do routingu, zastanów się, jak go usunąć. Możesz na przykład utworzyć bezpośredni link do rzeczywistego
działania lub do pojedynczego działania z podskładnikami. Jeśli nie jest to możliwe, możesz użyć metody SplashScreen.setKeepOnScreenCondition
, aby zachować działanie routingu, ale zatrzymać jego renderowanie. Przeniesie to ekran powitalny do następnego działania i zapewni płynne przejście.
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(); } ...
Zachowaj niestandardową aktywność na potrzeby promowania marki
Jeśli do celów związanych z budowaniem marki chcesz używać poprzedniego ekranu powitalnego Activity
, możesz przejść z ekranu powitalnego systemu na niestandardowy Activity
, dostosowując animację wyłączania ekranu powitalnego.
Najlepiej jednak w miarę możliwości unikać takiej sytuacji i używać interfejsu API SplashScreen
do oznaczania ekranu powitalnego marki.
Jeśli chcesz wyświetlić okno, zalecamy wyświetlanie go nad kolejnym niestandardowym działaniem na ekranie powitalnym lub w głównym działaniu po ekranie powitalnym systemu.
Usuń aktywność na niestandardowym ekranie powitalnym
Zasadniczo zalecamy jednoczesne usunięcie poprzedniego niestandardowego ekranu powitalnego Activity
, aby uniknąć duplikowania ekranów powitalnych, zwiększyć wydajność i skrócić czas wczytywania takiego ekranu. Istnieją różne techniki, których można użyć, aby uniknąć wyświetlania zbędnych działań na ekranie powitalnym.
Używaj leniwego ładowania komponentów, modułów i bibliotek. Unikaj wczytywania lub inicjowania komponentów bądź bibliotek, które nie są wymagane do działania aplikacji w momencie uruchomienia. Wczytaj je później, gdy aplikacja ich będzie potrzebować.
Jeśli Twoja aplikacja naprawdę potrzebuje komponentu do prawidłowego działania, ładuj go tylko wtedy, gdy jest naprawdę potrzebny, a nie podczas uruchamiania, lub użyj wątku w tle, aby wczytać go po uruchomieniu aplikacji. Postaraj się, żeby urządzenie
Application.onCreate()
było jak najlżejsze.Możesz też korzystać z biblioteki startowej aplikacji do inicjowania komponentów podczas uruchamiania aplikacji. Upewnij się przy tym, że wczytasz wszystkie moduły wymagane na potrzeby działania początkowego i nie wprowadzaj żadnych zakłóceń, w których stają się moduły wczytywane z leniwym ładowaniem.
Utwórz obiekt zastępczy podczas wczytywania lokalnej ilości danych. Stosuj rekomendowaną metodę tworzenia motywów i wstrzymaj renderowanie, dopóki aplikacja nie będzie gotowa. Aby wdrożyć ekran powitalny o zgodności wstecznej, wykonaj czynności opisane w artykule Zadbaj o to, aby ekran powitalny był wyświetlany przez dłuższy czas.
Pokaż obiekty zastępcze. W przypadku obciążeń sieciowych o nieokreślonym czasie trwania zamknij ekran powitalny i wyświetl obiekty zastępcze dla wczytywania asynchronicznego. Możesz zastosować w obszarze treści subtelne animacje, które będą odzwierciedlać stan wczytywania. Upewnij się, że struktura wczytanej treści pasuje do struktury szkieletu, by zapewnić płynne przejście podczas wczytywania treści.
Używaj buforowania. Gdy użytkownik otworzy aplikację po raz pierwszy, możesz wyświetlić wskaźniki wczytywania niektórych elementów interfejsu, jak pokazano na ilustracji poniżej. Gdy następnym razem użytkownik wróci do aplikacji, możesz wyświetlić tę zawartość z pamięci podręcznej podczas wczytywania nowszych treści.