Migracja implementacji ekranu powitalnego na Androida 12 lub nowszego

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.

Począwszy od Androida 12 system stosuje domyślny ekran powitalny systemu Android w przypadku uruchomień „na zimno”„na ciepło” 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 przeprowadzisz migracji aplikacji, jej uruchamianie w Androidzie 12 i później może być utrudnione lub przynieść niezamierzone skutki.

  • Jeśli istniejący ekran powitalny jest zaimplementowany za pomocą niestandardowego motywu, który zastępuje android:windowBackground, system zastąpi niestandardowy ekran powitalny domyślnym ekranem powitalnym systemu Android w wersji 12 lub nowszej. 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.

Możesz zapobiec tym niezamierzonym zmianom, przeprowadzając proces migracji opisany 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 kompatybilna SplashScreen

Możesz używać interfejsu API SplashScreen bezpośrednio, ale zdecydowanie zalecamy korzystanie z biblioteki zgodnej z Androidx 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 został napisany przy użyciu biblioteki kompatybilności.

Jeśli przenosisz dane bezpośrednio przy użyciu interfejsu SplashScreen API, 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 Androida 12.

Jeśli migracja odbywa się za pomocą biblioteki zgodności SplashScreen, system wyświetla ten sam ekran powitalny we wszystkich wersjach Androida.

Migracja implementacji ekranu powitalnego

Wykonaj te czynności, aby przenieść dotychczasową implementację ekranu wczytywania na Androida 12 i nowsze wersje.

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 API SplashScreen skraca też czas oczekiwania na uruchomienie, który występuje w przypadku dedykowanej aktywności ekranu powitalnego.

Aby przenieść ekran powitalny:

  1. W pliku build.gradle zmodyfikuj element compileSdkVersion i uwzględnij bibliotekę kompatybilności SplashScreen w zależnościach.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Utwórz motyw, który jest nadrzędnym elementem tematu 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 początkowej aktywności tym, który został utworzony w poprzednim kroku.

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. 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órego możesz użyć opcjonalnie do dostosowania animacji lub dłuższego wyświetlania ekranu powitalnego. Więcej informacji o dostosowywaniu animacji znajdziesz w artykułach Utrzymywanie ekranu powitalnego na ekranie przez dłuższy czasDostosowywanie animacji zamykania ekranu powitalnego.

Dostosuj swoją aktywność na ekranie powitalnym 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 uniemożliw jej wyświetlanie.
  • Zachowaj niestandardową aktywność ze względu na elementy budujące markę.
  • Usuń niestandardową aktywność i w razie potrzeby dostosuj aplikację.

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 np. 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ć SplashScreen.setKeepOnScreenCondition, aby zachować aktywność routingu, ale zatrzymać jej renderowanie. Spowoduje to przeniesienie ekranu powitalnego do następnego działania i 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 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. W miarę możliwości unikaj jednak tego scenariusza i używaj interfejsu API SplashScreen do promowania swojej marki na ekranie powitalnym.

Jeśli chcesz wyświetlić ekran dialogowy, zalecamy wyświetlanie go na kolejnym niestandardowym ekranie powitalnym lub na głównym ekranie po ekranie powitalnym systemu.

Usuń niestandardowy ekran powitalny z aktywności

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żesz użyć, aby uniknąć wyświetlania zbędnych czynności 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 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, wczytując lokalnie niewielką ilość danych. Użyj zalecanego podejścia do stylizacji i opóźnij renderowanie do momentu, gdy aplikacja będzie gotowa. 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 wczytywania danych z sieci o nieokreślonym czasie trwania usuń ekran powitalny i pokaż zastępniki dla wczytywania asynchronicznego. Możesz zastosować w obszarze treści subtelne animacje, które będą odzwierciedlać stan wczytywania. Upewnij się, że struktura wczytanych treści jest jak najbardziej zbliżona do struktury szkieletu, aby zapewnić płynne przejście podczas wczytywania treści.

  • Używaj buforowania. Gdy użytkownik otwiera aplikację po raz pierwszy, możesz wyświetlać wskaźniki wczytywania niektórych elementów interfejsu, jak pokazano na rysunku 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.

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