Implementierung des Ladebildschirms zu Android 12 und höher migrieren

Wenn Sie unter Android 11 oder früher einen benutzerdefinierten Ladebildschirm implementieren, migrieren Sie Ihre App zur SplashScreen API, damit sie unter Android 12 und höher korrekt angezeigt wird.

Ab Android 12 wendet das System bei Kalt und Warm starts für alle Apps den Standardladebildschirm des Android-Systems an. Standardmäßig wird dieser Systemladebildschirm mit dem Launcher-Symbol Ihrer App und dem windowBackground Ihres Designs erstellt, sofern es sich um eine einzelne Farbe handelt.

Wenn Sie Ihre App nicht migrieren, kann die App-Startzeit unter Android 12 und höher länger sein oder es können unerwünschte Ergebnisse auftreten.

  • Wenn Ihr vorhandener Ladebildschirm mit einem benutzerdefinierten Design implementiert wurde, das android:windowBackgroundüberschreibt, ersetzt das System Ihren benutzerdefinierten Ladebildschirm unter Android 12 und höher durch einen Standardladebildschirm des Android-Systems. Das ist möglicherweise nicht das gewünschte Verhalten Ihrer App.

  • Wenn Ihr vorhandener Ladebildschirm mit einer dedizierten Activity implementiert wurde, werden beim Starten Ihrer App auf Geräten mit Android 12 oder höher zwei Ladebildschirme angezeigt: zuerst der Systemladebildschirm und dann die vorhandene Ladebildschirm-Activity.

Sie können diese Probleme vermeiden, indem Sie den in diesem Dokument beschriebenen Migrationsprozess ausführen. Nach der Migration verbessert die API die Startzeit, gibt Ihnen die volle Kontrolle über den Ladebildschirm und sorgt für ein einheitlicheres Startverhalten im Vergleich zu anderen Apps auf der Plattform.

SplashScreen-Kompatibilitätsbibliothek

Sie können die SplashScreen API direkt verwenden. Wir empfehlen jedoch, stattdessen die Androidx SplashScreen-Kompatibilitätsbibliothek zu verwenden. Die Kompatibilitätsbibliothek verwendet die SplashScreen API, ermöglicht Abwärtskompatibilität und sorgt für ein einheitliches Erscheinungsbild des Ladebildschirms auf allen Android-Versionen. Dieses Dokument wurde mit der Kompatibilitätsbibliothek erstellt.

Wenn Sie direkt mit der SplashScreen API migrieren, sieht Ihr Ladebildschirm unter Android 11 und früher genauso aus wie vor der Migration. Ab Android 12 hat der Ladebildschirm das Erscheinungsbild von Android 12.

Wenn Sie mit der SplashScreen-Kompatibilitätsbibliothek migrieren, zeigt das System auf allen Android-Versionen denselben Ladebildschirm an.

Ladebildschirm-Implementierung migrieren

Führen Sie die folgenden Schritte aus, um Ihre vorhandene Ladebildschirm-Implementierung zu Android 12 und höher zu migrieren.

Diese Vorgehensweise gilt für alle Arten von Implementierungen, von denen Sie migrieren. Wenn Sie von einer dedizierten Activity migrieren, folgen Sie den best practices in diesem Dokument, um Ihre benutzerdefinierte Ladebildschirm-Activity anzupassen. Die SplashScreen API reduziert auch die Startlatenz, die durch eine dedizierte Ladebildschirm-Activity verursacht wird.

So migrieren Sie Ihren Ladebildschirm:

  1. Ändern Sie in der Datei build.gradle die compileSdkVersion und fügen Sie die SplashScreen-Kompatibilitätsbibliothek in die Abhängigkeiten ein.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Erstellen Sie ein Design mit dem übergeordneten Design Theme.SplashScreen. Legen Sie für postSplashScreenTheme das Design fest, das die Activity verwenden muss, und für windowSplashScreenAnimatedIcon eine Drawable- oder animierte Drawable-Ressource. Die anderen Attribute sind optional.

    <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>
    

    Wenn Sie unter Ihrem Symbol eine Hintergrundfarbe hinzufügen möchten, können Sie das Design Theme.SplashScreen.IconBackground verwenden und das Attribut windowSplashScreenIconBackground festlegen.

  3. Ersetzen Sie im Manifest das Design der Start-Activity durch das Design, das Sie im vorherigen Schritt erstellt haben.

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. Rufen Sie in der Start-Activity installSplashScreen auf, bevor Sie super.onCreate() aufrufen.

    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 gibt das Ladebildschirmobjekt zurück, mit dem Sie optional die Animation anpassen oder den Ladebildschirm länger anzeigen lassen können. Weitere Informationen zum Anpassen der Animation finden Sie unter Ladebildschirm länger anzeigen lassen und Animation zum Schließen des Ladebildschirms anpassen.

Benutzerdefinierte Ladebildschirm-Activity an den Ladebildschirm anpassen

Nachdem Sie zu dem Ladebildschirm für Android 12 und höher migriert haben, entscheiden Sie, was mit Ihrer vorherigen benutzerdefinierten Ladebildschirm-Activity geschehen soll. Sie haben folgende Möglichkeiten:

  • Benutzerdefinierte Activity beibehalten, aber nicht anzeigen.
  • Benutzerdefinierte Activity aus Branding-Gründen beibehalten.
  • Benutzerdefinierte Activity entfernen und App nach Bedarf anpassen.

Anzeige der benutzerdefinierten Activity verhindern

Wenn Ihre vorherige Ladebildschirm-Activity hauptsächlich für das Routing verwendet wird, sollten Sie sie entfernen. Sie können beispielsweise direkt zur eigentlichen Activity verlinken oder zu einer einzelnen Activity mit Unterkomponenten wechseln. Wenn das nicht möglich ist, können Sie mit SplashScreen.setKeepOnScreenCondition die Routing-Activity beibehalten, aber verhindern, dass sie gerendert wird. Dadurch wird der Ladebildschirm zur nächsten Activity übertragen und ein reibungsloser Übergang ermöglicht.

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();
    }
  ...
  

Benutzerdefinierte Activity aus Branding-Gründen beibehalten

Wenn Sie eine vorherige Ladebildschirm-Activity aus Branding-Gründen verwenden möchten, können Sie vom Systemladebildschirm zu Ihrer benutzerdefinierten Ladebildschirm-Activity wechseln, indem Sie die Animation zum Schließen des Ladebildschirms anpassen. Dieses Szenario sollte jedoch nach Möglichkeit vermieden werden. Verwenden Sie stattdessen die SplashScreen API, um Ihren Ladebildschirm zu branden.

Wenn Sie ein Dialogfeld anzeigen müssen, empfehlen wir, es nach dem Systemladebildschirm über der nachfolgenden benutzerdefinierten Ladebildschirm-Activity oder über der Haupt-Activity anzuzeigen.

Benutzerdefinierte Ladebildschirm-Activity entfernen

Im Allgemeinen empfehlen wir, Ihre vorherige benutzerdefinierte Ladebildschirm-Activity vollständig zu entfernen, um die doppelte Anzeige von Ladebildschirmen zu vermeiden, die Effizienz zu steigern und die Ladezeiten des Ladebildschirms zu verkürzen. Es gibt verschiedene Techniken, mit denen Sie vermeiden können, dass redundante Ladebildschirm-Activities angezeigt werden.

  • Verwenden Sie Lazy Loading für Ihre Komponenten, Module oder Bibliotheken. Vermeiden Sie das Laden oder Initialisieren von Komponenten oder Bibliotheken, die für die Funktion der App beim Start nicht erforderlich sind. Laden Sie sie später, wenn die App sie benötigt.

    Wenn Ihre App eine Komponente unbedingt benötigt, laden Sie sie nur, wenn sie wirklich erforderlich ist, und nicht beim Start. Alternativ können Sie sie in einem Hintergrundthread laden, nachdem die App gestartet wurde. Versuchen Sie, Application.onCreate() so schlank wie möglich zu halten.

    Sie können auch die App Startup-Bibliothek verwenden, um Komponenten beim Start der Anwendung zu initialisieren. Achten Sie dabei darauf, dass alle erforderlichen Module für die Start-Activity geladen werden und dass es keine Ruckler gibt, wenn die verzögert geladenen Module verfügbar werden.

  • Erstellen Sie einen Platzhalter, während eine kleine Datenmenge lokal geladen wird. Verwenden Sie den empfohlenen Theming-Ansatz und warten Sie mit dem Rendering, bis die App bereit ist. Wenn Sie einen abwärtskompatiblen Ladebildschirm implementieren möchten, folgen Sie der Anleitung unter Ladebildschirm länger anzeigen lassen.

  • Platzhalter anzeigen. Bei netzwerkbasierten Ladevorgängen mit unbestimmter Dauer schließen Sie den Ladebildschirm und zeigen Sie Platzhalter für das asynchrone Laden an. Sie können dezente Animationen auf den Inhaltsbereich anwenden, die den Ladestatus widerspiegeln. Achten Sie darauf, dass die Struktur der geladenen Inhalte so gut wie möglich mit der Skelettstruktur übereinstimmt, um einen reibungslosen Übergang zu ermöglichen, wenn die Inhalte geladen werden.

  • Caching verwenden. Wenn ein Nutzer Ihre App zum ersten Mal öffnet, können Sie für einige UI-Elemente Ladeindikatoren anzeigen, wie in der folgenden Abbildung zu sehen. Wenn der Nutzer das nächste Mal zu Ihrer App zurückkehrt, können Sie diese im Cache gespeicherten Inhalte anzeigen, während Sie neuere Inhalte laden.

Abbildung 1. UI-Platzhalter anzeigen.