Migracja implementacji ekranu powitalnego na Androida 12 lub nowszego

Jeśli w Androidzie 11 lub starszym zaimplementujesz niestandardowy ekran powitalny, przeprowadź migrację swojej aplikacji do interfejsu SplashScreen API, aby zapewnić jej prawidłowe wyświetlanie w Androidzie 12 i nowszych.

Od Androida 12 system stosuje domyślny ekran powitalny systemu Android podczas zimnego i ciepłego uruchamiania wszystkich aplikacji. Domyślnie, ten ekran powitalny jest tworzony przy użyciu ikony programu uruchamiającego aplikacji i elementu windowBackground motywu, jeśli jest to jednolity kolor.

Jeśli nie przeprowadzisz migracji aplikacji, jej uruchamianie w Androidzie 12 i nowszych może być wolniejsze lub mieć nieoczekiwane skutki.

  • Jeśli dotychczasowy ekran powitalny jest zaimplementowany przy użyciu a motywu niestandardowego, który zastępuje android:windowBackground, w Androidzie 12 i nowszych system zastąpi Twój niestandardowy ekran powitalny domyślnym ekranem powitalnym systemu Android. Może to nie być zamierzone działanie aplikacji.

  • Jeśli dotychczasowy ekran powitalny jest zaimplementowany przy użyciu dedykowanego elementu Activity, uruchomienie aplikacji na urządzeniach z Androidem 12 lub nowszym spowoduje wyświetlenie 2 ekranów powitalnych: ekranu powitalnego systemu, a następnie dotychczasowego ekranu powitalnego.

Aby uniknąć tych problemów, wykonaj 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 SplashScreen

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

Jeśli przeprowadzisz migrację przy użyciu interfejsu SplashScreen API bezpośrednio, w Androidzie 11 i starszych 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 przeprowadzisz migrację przy użyciu biblioteki zgodności SplashScreen, system będzie wyświetlać ten sam ekran powitalny we wszystkich wersjach Androida.

Migracja implementacji ekranu powitalnego

Aby przeprowadzić migrację dotychczasowej implementacji ekranu powitalnego do Androida 12 i nowszych, wykonaj te czynności.

Ta procedura dotyczy każdego typu implementacji, z której przeprowadzasz migrację. Jeśli przeprowadzasz migrację z dedykowanego elementu Activity, postępuj zgodnie z sprawdzonymi metodami opisanymi w tym dokumencie, aby dostosować niestandardowy ekran powitalny Activity. Interfejs SplashScreen API zmniejsza też opóźnienie uruchamiania, które występuje w przypadku dedykowanego ekranu powitalnego.

Aby przeprowadzić migrację ekranu powitalnego:

  1. W pliku build.gradle zmień compileSdkVersion i dodaj bibliotekę zgodności SplashScreen do zależności.

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

  3. 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">
    ...
    
  4. Wywołaj installSplashScreen w początkowej aktywności 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 wyświetlania ekranu powitalnego przez dłuższy czas. Więcej informacji o dostosowywaniu animacji znajdziesz w artykułach Wyświetlanie ekranu powitalnego przez dłuższy czas i Dostosowywanie animacji zamykania ekranu powitalnego.

Dostosowywanie niestandardowego ekranu powitalnego Activity do ekranu powitalnego

Po przeprowadzeniu migracji do ekranu powitalnego w Androidzie 12 i nowszych zdecyduj, co zrobić z poprzednim niestandardowym ekranem powitalnym Activity. Masz te opcje:

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

Uniemożliwianie wyświetlania niestandardowej aktywności

Jeśli poprzedni ekran powitalny Activity jest używany głównie do routingu, 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 nie jest to możliwe, możesz użyć SplashScreen.setKeepOnScreenCondition aby zachować aktywność routingu, ale uniemożliwić jej renderowanie. Dzięki temu ekran powitalny zostanie przeniesiony do następnej aktywności, 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();
    }
  ...
  

Zachowywanie niestandardowej aktywności ze względu na branding

Jeśli chcesz używać poprzedniego ekranu powitalnego Activity ze względu na branding, możesz przejść z ekranu powitalnego systemu do niestandardowego ekranu powitalnego Activity przez dostosowanie animacji zamykania ekranu powitalnego. Jeśli to możliwe, unikaj jednak tego scenariusza i używaj interfejsu SplashScreen API do brandingu ekranu powitalnego.

Jeśli musisz wyświetlić okno, zalecamy wyświetlenie go nad kolejnym niestandardowym ekranem powitalnym lub nad głównym ekranem powitalnym po ekranie powitalnym systemu.

Usuwanie niestandardowego ekranu powitalnego Activity

Zalecamy całkowite usunięcie poprzedniego niestandardowego ekranu powitalnego Activity, 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 ładowania 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. Wczytaj je później, gdy aplikacja będzie ich potrzebować.

    Jeśli aplikacja naprawdę potrzebuje komponentu do prawidłowego działania, wczytaj go tylko wtedy, gdy jest to konieczne, a nie podczas uruchamiania, lub użyj wątku w tle, aby wczytać go po uruchomieniu aplikacji. Staraj się, aby Application.onCreate() było jak najkrótsze.

    Możesz też skorzystać z biblioteki App Startup, aby zainicjować komponenty podczas uruchamiania aplikacji. Pamiętaj jednak, aby wczytać wszystkie moduły wymagane do uruchomienia aktywności i nie wprowadzać opóźnień, gdy moduły wczytywane leniwie staną się dostępne.

  • Utwórz obiekt zastępczy podczas wczytywania niewielkiej ilości danych lokalnie. Użyj zalecanego podejścia do tworzenia motywów i wstrzymaj renderowanie, dopóki aplikacja nie będzie gotowa. Aby zaimplementować ekran powitalny, który jest zgodny wstecznie, wykonaj czynności opisane w artykule Wyświetlanie ekranu powitalnego przez dłuższy czas.

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

  • Używaj pamięci podręcznej. 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 użytkownik wróci do aplikacji, możesz wyświetlić tę zawartość z pamięci podręcznej, podczas gdy wczytujesz najnowsze treści.

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