Migracja implementacji ekranu powitalnego na Androida 12 lub nowszego

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:

  1. 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'
    }
    
  2. 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ć 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, zanim zadzwonisz 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 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.

Rys. 1. Wyświetlam obiekty zastępcze UI.