Implementierung des Ladebildschirms zu Android 12 und höher migrieren

Wenn du unter Android 11 oder niedriger einen benutzerdefinierten Ladebildschirm implementiert hast, musst du deine App zur SplashScreen API migrieren, damit sie unter Android 12 und höher korrekt angezeigt wird.

Ab Android 12 wendet das System bei allen Apps den Standard-Ladebildschirm des Android-Systems bei Kaltstart und Warmstart an. Dieser Systemstartbildschirm besteht standardmäßig aus dem Element des Launcher-Symbols Ihrer App und dem windowBackground Ihres Designs, wenn es eine einzelne Farbe ist.

Wenn Sie Ihre App nicht migrieren, kann sich der Start Ihrer App unter Android 12 und höher verschlechtern oder zu unbeabsichtigten Ergebnissen führen.

  • Wenn Ihr vorhandener Ladebildschirm mit einem benutzerdefinierten Design, das android:windowBackground überschreibt, implementiert wird, ersetzt das System Ihren benutzerdefinierten Ladebildschirm unter Android 12 und höher durch einen Standardstartbildschirm für das Android-System. Möglicherweise entspricht dies nicht der vorgesehenen Nutzung Ihrer App.

  • Wenn Ihr vorhandener Ladebildschirm mit einem dedizierten Activity implementiert wurde, führt der Start Ihrer App auf Geräten mit Android 12 oder höher zu doppelten Ladebildschirmen: Der Ladebildschirm des Systems wird angezeigt, gefolgt von der bestehenden Aktivität auf dem Ladebildschirm.

Sie können diese beeinträchtigten oder unbeabsichtigten Vorgänge verhindern, indem Sie den in diesem Dokument beschriebenen Migrationsprozess ausführen. Nach der Migration verbessert die API die Startzeit, gibt Ihnen die vollständige Kontrolle über den Ladebildschirm und sorgt für einen einheitlichen Start mit anderen Anwendungen auf der Plattform.

SplashScreen-kompatible Bibliothek

Sie können die SplashScreen API direkt verwenden. Wir empfehlen jedoch dringend, stattdessen die Androidx-Kompatibilitätsbibliothek SplashScreen zu verwenden. Die kompatible Bibliothek nutzt die SplashScreen API, ermöglicht Abwärtskompatibilität und sorgt bei allen Android-Versionen für ein einheitliches Erscheinungsbild des Ladebildschirms. Dieses Dokument wurde in der Compat-Bibliothek geschrieben.

Wenn Sie direkt mit der SplashScreen API migrieren, sieht der Ladebildschirm unter Android 11 und niedriger genauso aus wie vor der Migration. Ab Android 12 hat der Ladebildschirm das Design von Android 12.

Wenn Sie die SplashScreen-kompatible Bibliothek verwenden, zeigt das System auf allen Android-Versionen denselben Ladebildschirm an.

Implementierung des Ladebildschirms migrieren

Führe die folgenden Schritte aus, um deine vorhandene Implementierung des Ladebildschirms zu Android 12 und höher zu migrieren.

Dieses Verfahren gilt für jede Art von Implementierung, von der Sie migrieren. Wenn Sie von einem dedizierten Activity migrieren, folgen Sie den Best Practices in diesem Dokument, um Ihren benutzerdefinierten Ladebildschirm-Activity anzupassen. Die SplashScreen API reduziert auch die Startlatenz, die durch eine dedizierte Aktivität auf dem Ladebildschirm eingeführt wird.

So migrieren Sie Ihren Ladebildschirm:

  1. In der Datei build.gradle ändern Sie Ihre compileSdkVersion und nehmen die SplashScreen-kompatible Bibliothek in die Abhängigkeiten auf.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Erstellen Sie ein Design mit einem übergeordneten Element von Theme.SplashScreen. Lege den Wert von postSplashScreenTheme auf das Design fest, das von Activity verwendet werden soll, und den Wert von windowSplashScreenAnimatedIcon auf ein Drawable- oder animiertes Drawable. 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 eine Hintergrundfarbe unter dem Symbol 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 Startaktivität 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 installSplashScreen in der Startaktivität 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 Begrüßungsbildschirmobjekt zurück, mit dem Sie optional Animationen anpassen oder den Ladebildschirm für längere Zeit auf dem Bildschirm sichtbar lassen können. Weitere Informationen zum Anpassen der Animation finden Sie unter Ladebildschirm über längere Zeit auf dem Bildschirm anzeigen und Animation zum Schließen des Ladebildschirms anpassen.

Benutzerdefinierte Aktivitäten für den Ladebildschirm an den Ladebildschirm anpassen

Nach der Migration zum Ladebildschirm für Android 12 und höher kannst du entscheiden, was mit deinem vorherigen benutzerdefinierten Ladebildschirm Activity geschehen soll. Sie haben folgende Möglichkeiten:

  • Benutzerdefinierte Aktivität beibehalten, aber nicht anzeigen
  • Behalten Sie die benutzerdefinierte Aktivität zu Branding-Gründen bei.
  • Entfernen Sie die benutzerdefinierte Aktivität und passen Sie Ihre App nach Bedarf an.

Verhindern, dass die benutzerdefinierte Aktivität angezeigt wird

Wenn der vorherige Ladebildschirm Activity hauptsächlich für das Routing verwendet wird, überlegen Sie, wie Sie ihn entfernen können. Sie können zum Beispiel direkt auf die tatsächliche Aktivität verlinken oder zu einer einzelnen Aktivität mit Unterkomponenten wechseln. Falls dies nicht möglich ist, können Sie mit SplashScreen.setKeepOnScreenCondition die Routingaktivität beibehalten, aber das Rendering stoppen. Dadurch wird der Ladebildschirm zur nächsten Aktivität übertragen und ein reibungsloser Übergang wird 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 Aktivität für das Branding beibehalten

Wenn Sie zu Branding-Gründen einen früheren Ladebildschirm Activity verwenden möchten, können Sie vom System-Ladebildschirm zu Ihrem benutzerdefinierten Ladebildschirm Activity wechseln, indem Sie die Animation zum Schließen des Ladebildschirms anpassen. Es empfiehlt sich jedoch, dieses Szenario möglichst zu vermeiden und den Ladebildschirm mit der SplashScreen API zu versehen.

Wenn ein Dialogfeld eingeblendet werden muss, empfehlen wir, es über der nachfolgenden benutzerdefinierten Ladebildschirmaktivität oder über der Hauptaktivität nach dem Systemstartbildschirm anzuzeigen.

Benutzerdefinierte Aktivität für den Ladebildschirm entfernen

Im Allgemeinen empfehlen wir, den vorherigen benutzerdefinierten Ladebildschirm Activity vollständig zu entfernen, um doppelte Ladebildschirme zu vermeiden, die Effizienz zu steigern und die Ladezeiten des Ladebildschirms zu verkürzen. Es gibt verschiedene Techniken, mit denen Sie die Anzeige redundanter Ladebildschirmaktivitäten vermeiden können.

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

    Wenn Ihre Anwendung wirklich eine Komponente benötigt, um ordnungsgemäß zu funktionieren, laden Sie sie nur, wenn sie wirklich benötigt wird, und nicht beim Start. Sie können auch einen Hintergrundthread verwenden, um sie nach dem Start der Anwendung zu laden. Versuchen Sie, Application.onCreate() so leicht wie möglich zu halten.

    Sie können auch die App-Start-Bibliothek verwenden, um Komponenten beim Anwendungsstart zu initialisieren. Achten Sie dabei darauf, dass weiterhin alle erforderlichen Module für die Startaktivität geladen werden, und führen Sie keine Janks ein, bei denen die langsam geladenen Module verfügbar werden.

  • Erstellen Sie einen Platzhalter, während Sie eine kleine Datenmenge lokal laden. Folgen Sie dem empfohlenen Ansatz und halten Sie das Rendering zurück, bis die Anwendung bereit ist. Um einen Ladebildschirm zu implementieren, der abwärtskompatibel ist, folgen Sie den Schritten unter Ladebildschirm länger auf dem Bildschirm zeigen.

  • Platzhalter einblenden: Schließen Sie bei netzwerkbasierten Ladevorgängen mit unbestimmter Dauer den Ladebildschirm und zeigen Sie Platzhalter für asynchrones Laden an. Sie können subtile Animationen auf den Inhaltsbereich anwenden, die den Ladestatus widerspiegeln. Achten Sie darauf, dass die geladene Inhaltsstruktur so gut wie möglich der Rasterstruktur entspricht, damit beim Laden des Inhalts ein reibungsloser Übergang möglich ist.

  • Caching verwenden Wenn ein Nutzer deine App zum ersten Mal öffnet, können für einige UI-Elemente Ladeanzeigen eingeblendet werden, wie in der folgenden Abbildung dargestellt. Wenn der Nutzer das nächste Mal zu deiner App zurückkehrt, kannst du diesen im Cache gespeicherten Inhalt anzeigen lassen, während du neuere Inhalte lädst.

Abbildung 1. UI-Platzhalter werden angezeigt.