Migracja implementacji ekranu powitalnego na Androida 12 lub nowszego

Jeśli w Androidzie 11 lub starszym masz zaimplementowany niestandardowy ekran powitalny, przenieś aplikację na interfejs SplashScreen API, aby mieć pewność, że będzie się ona prawidłowo wyświetlać w Androidzie 12 i nowszych wersjach.

Od Androida 12 system stosuje domyślny ekran powitalny systemu Android podczas uruchamiania na zimnona ciepło w przypadku wszystkich aplikacji. Domyślnie ten ekran powitalny systemu jest tworzony na podstawie ikony programu uruchamiającego aplikacji i windowBackground motywu, jeśli jest on jednokolorowy.

Jeśli nie przeprowadzisz migracji aplikacji, jej działanie na Androidzie 12 i nowszych wersjach może być gorsze lub może ona działać w nieoczekiwany sposób.

  • Jeśli obecny ekran powitalny jest zaimplementowany przy użyciu motywu niestandardowego, który zastępuje android:windowBackground, system zastąpi go domyślnym ekranem powitalnym systemu Android na urządzeniach z Androidem 12 lub nowszym. Może to nie być zamierzone działanie aplikacji.

  • Jeśli obecny ekran powitalny jest zaimplementowany za pomocą dedykowanego Activity, uruchomienie aplikacji na urządzeniach z Androidem 12 lub nowszym spowoduje wyświetlenie zduplikowanych ekranów powitalnych: ekranu powitalnego systemu, a następnie obecnego ekranu powitalnego aplikacji.

Aby zapobiec pogorszeniu jakości lub niepożądanym efektom, przeprowadź proces migracji opisany w tym dokumencie. Po migracji interfejs API skróci czas uruchamiania, zapewni pełną kontrolę nad ekranem powitalnym i umożliwi bardziej spójne uruchamianie aplikacji z innymi aplikacjami na platformie.

Biblioteka zgodności ekranu powitalnego

Możesz używać interfejsu SplashScreen API bezpośrednio, ale zdecydowanie zalecamy korzystanie z biblioteki zgodności Androidx SplashScreen. Biblioteka zgodności korzysta z interfejsu SplashScreen API, zapewnia zgodność wsteczną i tworzy spójny wygląd ekranu powitalnego we wszystkich wersjach Androida. Ten dokument został napisany z użyciem biblioteki compat.

Jeśli przeprowadzisz migrację za pomocą interfejsu SplashScreen API bezpośrednio na Androidzie 11 lub starszym, 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 migracja zostanie przeprowadzona przy użyciu SplashScreenbiblioteki zgodności, system będzie wyświetlać ten sam ekran powitalny we wszystkich wersjach Androida.

Przenoszenie implementacji ekranu powitalnego

Aby przenieść obecną implementację ekranu powitalnego na Androida 12 lub nowszego, wykonaj te czynności:

Ta procedura dotyczy każdego typu implementacji, z którego przeprowadzasz migrację. Jeśli przeprowadzasz migrację z Activity, postępuj zgodnie ze sprawdzonymi metodami opisanymi w tym dokumencie, aby dostosować niestandardowy ekran powitalny Activity. Interfejs SplashScreen API skraca też czas oczekiwania na uruchomienie, który występuje w przypadku dedykowanego ekranu powitalnego.

Aby przenieść ekran powitalny:

  1. W pliku build.gradlezmień compileSdkVersion i uwzględnij w zależnościach bibliotekę zgodności SplashScreen.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Utwórz motyw z motywem nadrzędnym Theme.SplashScreen. Ustaw wartość postSplashScreenTheme na motyw, którego musi używać Activity, a wartość windowSplashScreenAnimatedIcon na rysunek lub animowany rysunek. 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ć atrybut windowSplashScreenIconBackground.

  3. W pliku manifestu zastąp motyw aktywności początkowej motywem utworzonym w poprzednim kroku.

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. Wywołaj installSplashScreen w aktywności początkowej przed wywołaniem super.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 dłuższego wyświetlania ekranu powitalnego. Więcej informacji o dostosowywaniu animacji znajdziesz w artykułach Dłuższe wyświetlanie ekranu powitalnegoDostosowywanie animacji zamykania ekranu powitalnego.

Dostosowywanie działania niestandardowego ekranu powitalnego do ekranu powitalnego

Po przejściu na ekran powitalny w Androidzie 12 i nowszych wersjach zdecyduj, co zrobić z poprzednim niestandardowym ekranem powitalnymActivity. Możesz:

  • Zachowaj aktywność niestandardową, ale uniemożliw jej wyświetlanie.
  • Zachowaj aktywność niestandardową ze względu na branding.
  • Usuń aktywność niestandardową i w razie potrzeby dostosuj aplikację.

Zapobieganie wyświetlaniu niestandardowej aktywności

Jeśli poprzedni ekran powitalny Activity jest używany głównie do przekierowywania, rozważ jego usunięcie. Możesz na przykład bezpośrednio połączyć się z rzeczywistą aktywnością lub przejść do pojedynczej aktywności z podkomponentami. Jeśli to nie jest możliwe, możesz użyć SplashScreen.setKeepOnScreenCondition, aby zachować aktywność związaną z wyznaczaniem trasy, ale zatrzymać jej renderowanie. W ten sposób ekran powitalny zostanie przeniesiony do następnego działania, co 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 aktywność niestandardową na potrzeby brandingu

Jeśli chcesz używać poprzedniego ekranu powitalnego Activity ze względu na branding, możesz przejść z systemowego ekranu powitalnego na niestandardowy ekran powitalny Activity, dostosowując animację zamykania ekranu powitalnego. Jeśli to możliwe, unikaj jednak tej sytuacji i używaj interfejsu SplashScreen API do oznaczania ekranu powitalnego marką.

Jeśli musisz wyświetlić okno dialogowe, zalecamy wyświetlanie go na kolejnym niestandardowym ekranie powitalnym lub na ekranie głównym po ekranie powitalnym systemu.

Usuń niestandardowy ekran powitalny

Zasadniczo zalecamy całkowite usunięcie poprzedniego niestandardowego ekranu powitalnegoActivity, aby uniknąć duplikowania ekranów powitalnych, zwiększyć wydajność i skrócić czas wczytywania ekranu powitalnego. Istnieją różne techniki, których możesz użyć, aby uniknąć wyświetlania zbędnych ekranów powitalnych.

  • Używaj leniwego wczytywania komponentów, modułów lub bibliotek. Unikaj wczytywania lub inicjowania komponentów lub bibliotek, które nie są wymagane do działania aplikacji podczas uruchamiania. Załaduj je później, gdy będą potrzebne aplikacji.

    Jeśli aplikacja naprawdę potrzebuje komponentu do prawidłowego działania, wczytuj go tylko wtedy, gdy jest to konieczne, a nie w momencie uruchomienia. Możesz też użyć wątku w tle, aby wczytać go po uruchomieniu aplikacji. Staraj się, aby Application.onCreate() był jak najmniejszy.

    Możesz też skorzystać z biblioteki uruchamiania aplikacji, aby zainicjować komponenty podczas uruchamiania aplikacji. Pamiętaj, aby wczytać wszystkie moduły wymagane do rozpoczęcia aktywności i nie powodować zacięć w miejscach, w których dostępne stają się moduły wczytywane z opóźnieniem.

  • Utwórz element zastępczy podczas wczytywania niewielkiej ilości danych lokalnie. Zastosuj zalecane podejście do motywów i wstrzymaj renderowanie, dopóki aplikacja nie będzie gotowa. Aby wdrożyć ekran powitalny, który jest wstecznie kompatybilny, wykonaj czynności opisane w artykule Dłuższe wyświetlanie ekranu powitalnego.

  • Pokaż obiekty zastępcze. W przypadku wczytywania z sieci o nieokreślonym czasie trwania zamknij ekran powitalny i wyświetl symbole zastępcze dla wczytywania asynchronicznego. Rozważ zastosowanie subtelnych animacji w obszarze treści, które odzwierciedlają stan wczytywania. Upewnij się, że struktura załadowanych treści jest jak najbardziej zgodna ze strukturą szkieletową, aby zapewnić płynne przejście po załadowaniu treści.

  • Używaj buforowania. Gdy użytkownik otworzy aplikację po raz pierwszy, możesz wyświetlić wskaźniki ładowania niektórych elementów interfejsu, jak pokazano na ilustracji poniżej. Gdy użytkownik wróci do Twojej aplikacji, możesz wyświetlić te treści z pamięci podręcznej, a w tym czasie wczytać nowsze treści.

Rysunek 1. Wyświetlanie obiektów zastępczych interfejsu.