Implementierung des Ladebildschirms zu Android 12 und höher migrieren

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

Ab Android 12 wird der Standard-Ladebildschirm des Android-Systems bei Kaltstarts und Warmstarts für alle Apps angewendet. 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, wird der App-Start unter Android 12 und höher möglicherweise beeinträchtigt oder es kann zu unbeabsichtigten Ergebnissen kommen.

  • Wenn der vorhandene Ladebildschirm mit einem benutzerdefinierten Design, das android:windowBackground überschreibt, implementiert wird, ersetzt das System diesen unter Android 12 und höher durch einen standardmäßigen Ladebildschirm von Android. Das ist möglicherweise nicht die beabsichtigte Nutzung deiner App.

  • Wenn der vorhandene Ladebildschirm mit einem 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 volle Kontrolle über den Ladebildschirm und sorgt für eine einheitlichere Starterfahrung 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 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 in der Compat-Bibliothek geschrieben.

Wenn Sie direkt über die SplashScreen API migrieren, sieht der Ladebildschirm unter Android 11 und niedriger genauso aus wie vor der Migration. Ab Android 12 entspricht der Ladebildschirm dem Design von Android 12.

Wenn du mit der kompatiblen SplashScreen-Bibliothek migrierst, zeigt das System unter allen Android-Versionen denselben Ladebildschirm an.

Ladebildschirm-Implementierung migrieren

Führe die folgenden Schritte aus, um deine bestehende Ladebildschirmimplementierung zu Android 12 und höher zu migrieren.

Dieses Verfahren gilt für den Implementierungstyp, von dem Sie migrieren. Wenn Sie von einem dedizierten Activity migrieren, folgen Sie den Best Practices in diesem Dokument zur Anpassung Ihres benutzerdefinierten Activity-Ladebildschirms. Die SplashScreen API verringert außerdem die Startlatenz, die durch eine dedizierte Ladebildschirmaktivität entsteht.

So migrieren Sie den Ladebildschirm:

  1. Ändern Sie in der Datei build.gradle Ihre compileSdkVersion und fügen Sie die kompatible SplashScreen-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 einem übergeordneten Element von Theme.SplashScreen. Lege für den Wert von postSplashScreenTheme das Design fest, das von Activity verwendet werden muss, 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 du unter deinem Symbol eine Hintergrundfarbe hinzufügen möchtest, kannst du 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 Ladebildschirmobjekt zurück, das Sie optional verwenden können, um die Animation anzupassen oder den Ladebildschirm länger auf dem Bildschirm beizubehalten. Weitere Informationen zum Anpassen der Animation finden Sie unter Ladebildschirm längere Zeit auf dem Bildschirm lassen und Animation zum Schließen des Ladebildschirms anpassen.

Benutzerdefinierte Aktivität für den Ladebildschirm an den Ladebildschirm 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 nicht anzeigen.
  • Behalten Sie die benutzerdefinierte Aktivität aus 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, sollten Sie überlegen, wie Sie ihn entfernen können. Sie können beispielsweise direkt auf die eigentliche Aktivität verweisen oder zu einer einzelnen Aktivität mit Unterkomponenten wechseln. Wenn dies nicht möglich ist, können Sie mit SplashScreen.setKeepOnScreenCondition die Routingaktivität beibehalten, aber das Rendern beenden. Dadurch wird der Ladebildschirm in die nächste Aktivität übertragen, was einen reibungslosen Ü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 du einen früheren Ladebildschirm (Activity) aus Branding-Gründen verwenden möchtest, kannst du vom System-Ladebildschirm zu deinem benutzerdefinierten Ladebildschirm Activity wechseln. Dazu musst du die Animation zum Schließen des Ladebildschirms anpassen. Du solltest dieses Szenario jedoch nach Möglichkeit vermeiden und die SplashScreen API für das Branding deines Ladebildschirms verwenden.

Wenn ein Dialogfeld angezeigt werden muss, empfehlen wir, es über der nachfolgenden benutzerdefinierten Aktivität auf dem Ladebildschirm oder über der Hauptaktivität nach dem Systemstartbildschirm einzublenden.

Benutzerdefinierte Aktivität für den Ladebildschirm entfernen

Im Allgemeinen empfehlen wir, den benutzerdefinierten Ladebildschirm Activity vollständig zu entfernen, um doppelte Einträge zu vermeiden, die Effizienz zu steigern und die Ladezeiten des Ladebildschirms zu verkürzen. Es gibt verschiedene Techniken, mit denen Sie verhindern können, dass redundante Aktivitäten auf dem Ladebildschirm angezeigt werden.

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

    Wenn Ihre App eine Komponente wirklich benötigt, um ordnungsgemäß zu funktionieren, laden Sie sie nur dann, wenn sie wirklich benötigt wird, und nicht zum Startzeitpunkt. Sie können auch einen Hintergrundthread verwenden, um sie nach dem Start der App zu laden. Achte darauf, dass Application.onCreate() so leicht wie möglich ist.

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

  • Platzhalter erstellen, während eine kleine Datenmenge lokal geladen wird Verwenden Sie die empfohlene thematische Vorgehensweise und halten Sie das Rendering zurück, bis die Anwendung bereit 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: Schließen Sie bei netzwerkbasierten Ladevorgängen mit unbestimmter Dauer den Ladebildschirm und zeigen Sie Platzhalter für asynchrones Laden an. Erwägen Sie, dem Inhaltsbereich subtile Animationen anzuwenden, die den Ladestatus widerspiegeln. Achten Sie darauf, dass die Struktur der geladenen Inhalte der Rasterstruktur so gut wie möglich entspricht, damit beim Laden der Inhalte ein reibungsloser Übergang möglich ist.

  • Caching verwenden Wenn ein Nutzer deine App zum ersten Mal öffnet, kannst du 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 diesen im Cache gespeicherten Inhalt anzeigen lassen, während Sie neuere Inhalte laden.

Abbildung 1. UI-Platzhalter werden angezeigt.