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 wird der Standard-Startbildschirm des Android-Systems bei Kaltstarts und Warmstarts für alle Apps verwendet. Dieser Ladebildschirm wird standardmäßig aus dem Launcher-Symbolelement Ihrer App und dem windowBackground Ihres Designs erstellt, wenn es einfarbig ist.

Wenn Sie Ihre App nicht migrieren, kann die App-Startleistung unter Android 12 und höher beeinträchtigt sein oder es kann zu unbeabsichtigten Ergebnissen kommen.

  • Wenn Ihr vorhandener Startbildschirm mit einem benutzerdefinierten Design implementiert ist, das android:windowBackground überschreibt, ersetzt das System Ihren benutzerdefinierten Startbildschirm unter Android 12 und höher durch einen standardmäßigen Android-Systemstartbildschirm. Das ist möglicherweise nicht die beabsichtigte Funktionsweise Ihrer App.

  • Wenn der vorhandene Ladebildschirm mit einer dedizierten Activity implementiert wird, führt der Start der App auf Geräten mit Android 12 oder höher zu doppelten Ladebildschirmen: Es wird der Systemstartbildschirm angezeigt, gefolgt von der bestehenden Aktivität auf dem Ladebildschirm.

Sie können dies verhindern, 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 eine einheitlichere Starterfahrung mit anderen Apps auf der Plattform.

SplashScreen compat library

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

Wenn Sie direkt mit der SplashScreen API migrieren, sieht der Ladebildschirm unter Android 11 und niedriger genau so aus wie vor der Migration. Ab Android 12 entspricht der Startbildschirm dem Design von Android 12.

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

Implementierung des Ladebildschirms migrieren

Führen Sie die folgenden Schritte aus, um Ihre vorhandene Splashscreen-Implementierung auf Android 12 und höher umzustellen.

Diese Vorgehensweise gilt unabhängig von der Art der Implementierung, von der Sie migrieren. Wenn Sie von einer dedizierten Activity migrieren, folgen Sie den in diesem Dokument beschriebenen Best Practices für die Anpassung Ihres benutzerdefinierten Begrüßungsbildschirms Activity. Die SplashScreen API verringert außerdem die Startlatenz, die durch eine dedizierte Ladebildschirmaktivität entsteht.

So migrieren Sie Ihren Splashscreen:

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

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Erstellen Sie ein Thema mit Theme.SplashScreen als übergeordnetes Element. Legen Sie für postSplashScreenTheme das Design fest, das Activity verwenden muss, und für windowSplashScreenAnimatedIcon 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 unter dem Symbol eine Hintergrundfarbe hinzufügen möchten, können Sie das Thema 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 Splashscreen-Objekt zurück, mit dem Sie optional die Animation anpassen oder das Splashscreen länger auf dem Bildschirm anzeigen lassen können. Weitere Informationen zum Anpassen der Animation finden Sie unter Startbildschirm länger auf dem Display anzeigen und Animation zum Schließen des Startbildschirms anpassen.

Benutzerdefinierte Aktivität für den Begrüßungsbildschirm an den Begrüßungsbildschirm anpassen

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

  • Die benutzerdefinierte Aktivität beibehalten, aber verhindern, dass sie angezeigt wird.
  • Behalten Sie die benutzerdefinierte Aktivität aus Brandinggründen bei.
  • Entfernen Sie die benutzerdefinierte Aktivität und passen Sie Ihre App bei Bedarf an.

Verhindern, dass die benutzerdefinierte Aktivität angezeigt wird

Wenn Ihr vorheriger Startbildschirm Activity hauptsächlich für das Routing verwendet wird, sollten Sie überlegen, ihn zu entfernen. Sie können beispielsweise direkt zur eigentlichen Aktivität verlinken oder zu einer einzelnen Aktivität mit Unterkomponenten wechseln. Wenn das nicht möglich ist, können Sie mit SplashScreen.setKeepOnScreenCondition die Routingaktivität beibehalten, aber das Rendern verhindern. Dadurch wird der Begrüßungsbildschirm in die nächste Aktivität übertragen und ein reibungsloser Übergang wird unterstützt.

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 Startbildschirm Activity verwenden möchten, können Sie vom Systemstartbildschirm zu Ihrem benutzerdefinierten Startbildschirm Activity wechseln, indem Sie die Animation zum Schließen des Startbildschirms anpassen. Es ist jedoch am besten, dieses Szenario nach Möglichkeit zu vermeiden und die SplashScreen API zu verwenden, um Ihr Branding auf dem Splashscreen zu platzieren.

Wenn Sie ein Dialogfeld anzeigen möchten, empfehlen wir, es über die nachfolgende benutzerdefinierte Startbildschirmaktivität oder über die Hauptaktivität nach dem Systemstartbildschirm einzublenden.

Benutzerdefinierte Aktivität für den Splashscreen entfernen

ActivityWir empfehlen Ihnen, Ihren vorherigen benutzerdefinierten Ladebildschirm vollständig zu entfernen, um Duplikate zu vermeiden, die Effizienz zu steigern und die Ladezeiten des Ladebildschirms zu verkürzen. Es gibt verschiedene Möglichkeiten, redundante Aktivitäten auf dem Startbildschirm zu vermeiden.

  • Verwenden Sie Lazy Loading für Ihre Komponenten, Module oder Bibliotheken. Laden oder initialisieren Sie keine Komponenten oder Bibliotheken, die nicht erforderlich sind, damit die App beim Start funktioniert. Sie werden erst später geladen, wenn die App sie benötigt.

    Wenn Ihre App eine Komponente für die ordnungsgemäße Funktion wirklich benötigt, laden Sie sie nur dann, wenn sie wirklich benötigt wird, und nicht beim Starten. Sie können auch einen Hintergrund-Thread verwenden, um sie nach dem Starten der App zu laden. Versuchen Sie, die Application.onCreate() so klein wie möglich zu halten.

    Sie können auch die App Startup Library verwenden, um Komponenten beim Start der Anwendung zu initialisieren. Achten Sie dabei darauf, noch alle für die Startaktivität erforderlichen Module zu laden und keine Janks einzufügen, wenn die langsam geladenen Module verfügbar werden.

  • Erstellen Sie einen Platzhalter, während Sie eine kleine Menge an Daten lokal laden. Verwenden Sie den empfohlenen Ansatz für die Themengestaltung und halten Sie das Rendering zurück, bis die App fertig ist. Wenn du einen Ladebildschirm implementieren möchtest, der abwärtskompatibel ist, folge den Schritten unter Ladebildschirm länger auf dem Bildschirm lassen.

  • Platzhalter einblenden: Bei netzwerkbasierten Ladevorgängen mit unbestimmter Dauer sollten Sie den Splashscreen schließen und Platzhalter für das asynchrone Laden anzeigen. Sie können dem Inhaltsbereich subtile Animationen hinzufügen, die den Ladevorgang widerspiegeln. Achten Sie darauf, dass die Struktur der geladenen Inhalte so gut wie möglich mit der Skelettstruktur übereinstimmt, damit beim Laden der Inhalte ein reibungsloser Übergang möglich ist.

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

Abbildung 1. Benutzeroberflächen-Platzhalter werden angezeigt.