Implementierung des Ladebildschirms zu Android 12 und höher migrieren

Wenn Sie unter Android 11 oder niedriger 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 den Android-Systemstandard-Splash-Screen bei Kaltstarts und Warmstarts für alle Apps an. Standardmäßig wird dieser System-Splash-Screen aus dem Launcher-Symbol-Element Ihrer App und der windowBackground Ihres Themes erstellt, sofern es sich um eine einzelne Farbe handelt.

Wenn Sie Ihre App nicht migrieren, kann es bei Android 12 und höher zu Problemen beim Starten der App oder zu unerwarteten Ergebnissen kommen.

  • Wenn Ihr vorhandener Startbildschirm mit einem benutzerdefinierten Theme implementiert wird, das android:windowBackground überschreibt, ersetzt das System Ihren benutzerdefinierten Startbildschirm unter Android 12 und höher durch einen Standard-Startbildschirm des Android-Systems. Das ist möglicherweise nicht die beabsichtigte Nutzung Ihrer App.

  • Wenn Ihr vorhandener Startbildschirm mit einem dedizierten Activity implementiert ist, führt das Starten Ihrer App auf Geräten mit Android 12 oder höher zu doppelten Startbildschirmen: Der Systemstartbildschirm wird angezeigt, gefolgt von Ihrer vorhandenen Startbildschirmaktivität.

Sie können diese Beeinträchtigungen oder unbeabsichtigten Erfahrungen vermeiden, indem Sie den in diesem Dokument beschriebenen Migrationsprozess durchführen. Nach der Migration bietet die API eine verbesserte Startzeit, volle Kontrolle über den Splash-Screen und ein einheitlicheres Startverhalten mit anderen Apps auf der Plattform.

SplashScreen-kompatible Bibliothek

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

Wenn Sie die Migration direkt über die SplashScreen API durchführen, sieht der Ladebildschirm unter Android 11 und niedriger genau wie vor der Migration aus. Ab Android 12 hat der Startbildschirm das Design von Android 12.

Wenn Sie die Migration mit der SplashScreen-Kompatibilitätsbibliothek durchführen, wird auf allen Android-Versionen derselbe Splash-Screen angezeigt.

Implementierung des Ladebildschirms migrieren

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

Dieses Verfahren gilt unabhängig davon, von welcher Art von Implementierung Sie migrieren. Wenn Sie von einem dedizierten Activity migrieren, folgen Sie den Best Practices in diesem Dokument, um Ihren benutzerdefinierten Activity-Begrüßungsbildschirm anzupassen. Die SplashScreen API reduziert auch die Startlatenz, die durch eine dedizierte Ladebildschirm-Aktivität entsteht.

So migrieren Sie Ihren Splash-Screen:

  1. Ändern Sie in der Datei build.gradle die compileSdkVersion und fügen Sie die SplashScreen-Compat-Bibliothek 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 Element Theme.SplashScreen. Legen Sie für postSplashScreenTheme das Design fest, das für Activity verwendet werden soll, 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 eine Hintergrundfarbe unter dem Symbol hinzufügen möchten, können Sie das Theme.SplashScreen.IconBackground-Design verwenden und das Attribut windowSplashScreenIconBackground festlegen.

  3. Ersetzen Sie im Manifest das Theme der Startaktivität durch das Theme, 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 Startbildschirmobjekt zurück, das Sie optional verwenden können, um die Animation anzupassen oder den Startbildschirm länger anzeigen zu lassen. Weitere Informationen zum Anpassen der Animation finden Sie unter Splash-Screen länger anzeigen und Animation zum Schließen des Splash-Screens anpassen.

Benutzerdefinierte Ladebildschirm-Aktivität an den Ladebildschirm anpassen

Nachdem Sie zur SplashScreen API für Android 12 und höher migriert haben, müssen Sie entscheiden, was mit Ihrem bisherigen benutzerdefinierten Ladebildschirm Activity geschehen soll. Sie haben folgende Möglichkeiten:

  • Die benutzerdefinierte Aktivität beibehalten, aber nicht anzeigen lassen.
  • Die benutzerdefinierte Aktivität aus Branding-Gründen beibehalten.
  • Entfernen Sie die benutzerdefinierte Aktivität und passen Sie Ihre App nach Bedarf an.

Verhindern, dass die benutzerdefinierte Aktivität angezeigt wird

Wenn Ihr bisheriger Splash-Screen Activity hauptsächlich für das Routing verwendet wird, sollten Sie überlegen, wie Sie ihn entfernen können. Sie können beispielsweise direkt auf die tatsächliche Aktivität verlinken oder zu einer einzelnen Aktivität mit Unterkomponenten wechseln. Wenn das nicht möglich ist, können Sie SplashScreen.setKeepOnScreenCondition verwenden, um die Routing-Aktivität beizubehalten, aber das Rendern zu stoppen. Dadurch wird der Begrüßungsbildschirm an die nächste Aktivität übergeben 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 Aktivität für Branding beibehalten

Wenn Sie aus Branding-Gründen einen früheren Ladebildschirm Activity verwenden möchten, können Sie vom Systemladebildschirm zu Ihrem benutzerdefinierten Ladebildschirm Activity wechseln, indem Sie die Animation zum Schließen des Ladebildschirms anpassen. Es ist jedoch besser, dieses Szenario nach Möglichkeit zu vermeiden und die SplashScreen-API zu verwenden, um den Splash-Screen zu branden.

Wenn Sie ein Dialogfeld anzeigen müssen, empfehlen wir, es nach dem Systemstartbildschirm über der nachfolgenden benutzerdefinierten Startbildschirmaktivität oder über der Hauptaktivität anzuzeigen.

Benutzerdefinierte Splash-Screen-Aktivität entfernen

Im Allgemeinen empfehlen wir, den bisherigen 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 vermeiden können, dass redundante Aktivitäten auf dem Splash-Screen angezeigt werden.

  • Lazy Loading für Ihre Komponenten, Module oder Bibliotheken verwenden: Vermeiden Sie es, Komponenten oder Bibliotheken zu laden oder zu initialisieren, 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 wirklich eine Komponente benötigt, um richtig zu funktionieren, laden Sie sie nur, wenn sie wirklich benötigt wird, und nicht beim Start. Alternativ können Sie sie auch in einem Hintergrundthread laden, nachdem die App gestartet wurde. Versuche, die Application.onCreate() so leicht 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 Startaktivität geladen werden und es nicht zu Rucklern kommt, wenn die verzögert geladenen Module verfügbar werden.

  • Platzhalter erstellen, während eine kleine Menge Daten lokal geladen wird: Verwenden Sie den empfohlenen Ansatz für das Theming und warten Sie mit dem Rendern, bis die App bereit ist. Wenn Sie einen Splash-Screen implementieren möchten, der abwärtskompatibel ist, folgen Sie der Anleitung unter Splash-Screen länger anzeigen.

  • Platzhalter einblenden: Bei netzwerkbasierten Ladevorgängen mit unbestimmter Dauer sollte der Splash-Screen geschlossen und Platzhalter für das asynchrone Laden angezeigt werden. Erwägen Sie, dem Inhaltsbereich subtile Animationen hinzuzufügen, die den Ladestatus widerspiegeln. Achten Sie darauf, dass die geladene Inhaltsstruktur so gut wie möglich mit der Skelettstruktur übereinstimmt, um einen reibungslosen Übergang beim Laden der Inhalte zu ermöglichen.

  • Caching verwenden: Wenn ein Nutzer Ihre App zum ersten Mal öffnet, können Sie für einige UI-Elemente Ladeanzeigen einblenden, wie in der folgenden Abbildung dargestellt. 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 werden angezeigt.