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
Activityimplementiert 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:
Ändern Sie in der Datei
build.gradlediecompileSdkVersionund fügen Sie dieSplashScreen-Kompatibilitätsbibliothek in die Abhängigkeiten ein.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }Erstellen Sie ein Design mit dem übergeordneten Design
Theme.SplashScreen. Legen Sie fürpostSplashScreenThemedas Design fest, das dieActivityverwenden muss, und fürwindowSplashScreenAnimatedIconeine 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.IconBackgroundverwenden und das AttributwindowSplashScreenIconBackgroundfestlegen.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"> ...Rufen Sie in der Start-Activity
installSplashScreenauf, bevor Siesuper.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.