Wenn Sie unter Android 11 oder niedriger einen benutzerdefinierten Splash Screen 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 Standard-Splash-Screen des Android-Systems bei Kalt- und Warmstarts für alle Apps an. Standardmäßig wird dieser System-Splash-Screen aus dem Launcher-Symbolelement deiner App und dem windowBackground deines Designs erstellt, wenn es einfarbig ist.
Wenn du deine App nicht migrierst, kann es sein, dass der App-Start unter Android 12 und höher beeinträchtigt wird oder unerwartete Ergebnisse auftreten.
Wenn dein vorhandener Splash Screen mit einem benutzerdefinierten Design implementiert ist, das
android:windowBackgroundüberschreibt, ersetzt das System deinen benutzerdefinierten Splash Screen unter Android 12 und höher durch einen Standard-Splash Screen des Android-Systems. Das ist möglicherweise nicht die beabsichtigte Funktionsweise Ihrer App.Wenn dein vorhandener Splash Screen mit einer dedizierten
Activityimplementiert ist, werden beim Starten deiner App auf Geräten mit Android 12 oder höher doppelte Splash Screens angezeigt: Der System-Splash Screen wird angezeigt, gefolgt von deiner vorhandenen Splash Screen-Aktivität.
Sie können diese beeinträchtigten oder unbeabsichtigten Erfahrungen verhindern, indem Sie den in diesem Dokument beschriebenen Migrationsprozess abschließen. Nach der Migration verbessert die API die Startzeit, gibt Ihnen die volle Kontrolle über den Splash Screen und sorgt für ein einheitlicheres Starterlebnis mit anderen Apps auf der Plattform.
SplashScreen-Kompatibilitätsbibliothek
Sie können die SplashScreen API direkt verwenden. Wir empfehlen jedoch dringend, stattdessen die Androidx SplashScreen-Kompatibilitätsbibliothek zu verwenden. Die Kompatibilitätsbibliothek verwendet die SplashScreen API, ermöglicht die Abwärtskompatibilität und sorgt für ein einheitliches Erscheinungsbild des Splash Screens in allen Android-Versionen. Dieses Dokument wurde mit der Kompatibilitätsbibliothek geschrieben.
Wenn Sie die Migration direkt mit der SplashScreen API durchführen, sieht Ihr Splash Screen unter Android 11 und niedriger genauso aus wie vor der Migration. Ab Android 12 hat der Splash Screen das Design von Android 12.
Wenn Sie die Migration mit der Kompatibilitätsbibliothek SplashScreen durchführen, wird auf allen Android-Versionen derselbe Splash Screen angezeigt.
Ladebildschirm-Implementierung migrieren
Führe die folgenden Schritte aus, um deine vorhandene Splash Screen-Implementierung zu Android 12 und höher zu migrieren.
Dieses Verfahren gilt für alle Arten von Implementierungen, von denen Sie migrieren. Wenn Sie von einer dedizierten Activity migrieren, folgen Sie den in diesem Dokument beschriebenen Best Practices, um Ihren benutzerdefinierten Splash Screen Activity anzupassen. Die SplashScreen API reduziert auch die Startlatenz, die durch eine dedizierte Splash-Screen-Aktivität entsteht.
So migrieren Sie Ihren Splash Screen:
Ändern Sie in der Datei
build.gradlediecompileSdkVersionund fügen Sie die KompatibilitätsbibliothekSplashScreenin die Abhängigkeiten ein.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }Erstellen Sie ein Thema mit dem übergeordneten Element
Theme.SplashScreen. Setze den Wert vonpostSplashScreenThemeauf das Design, das dieActivityverwenden muss, und den Wert vonwindowSplashScreenAnimatedIconauf 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 Ihrem Symbol hinzufügen möchten, können Sie das Design
Theme.SplashScreen.IconBackgroundverwenden und das AttributwindowSplashScreenIconBackgroundfestlegen.Ersetze im Manifest das Design der Startaktivität durch das Design, das du im vorherigen Schritt erstellt hast.
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...Rufe
installSplashScreenin der Startaktivität auf, bevor dusuper.onCreate()aufrufst.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 Splash-Screen-Objekt zurück, mit dem du optional die Animation anpassen oder den Splash-Screen länger auf dem Bildschirm anzeigen lassen kannst. Weitere Informationen zum Anpassen der Animation findest du unter Splash Screen länger auf dem Bildschirm anzeigen und Animation zum Schließen des Splash Screens anpassen.
Benutzerdefinierte Aktivität für den Ladebildschirm an den Ladebildschirm anpassen
Nach der Migration zum Splash Screen für Android 12 und höher müssen Sie entscheiden, was Sie mit Ihrem vorherigen benutzerdefinierten Splash Screen Activity tun möchten. Die folgenden Optionen stehen Ihnen zur Verfügung:
- Die benutzerdefinierte Aktivität beibehalten, aber nicht anzeigen lassen.
- Behalten Sie die benutzerdefinierte Aktivität aus Branding-Gründen bei.
- Entfernen Sie die benutzerdefinierte Aktivität und passen Sie Ihre App entsprechend an.
Anzeige der benutzerdefinierten Aktivität verhindern
Wenn dein vorheriger Splash Screen Activity hauptsächlich für das Routing verwendet wird, solltest du überlegen, wie du ihn entfernen kannst. Sie können beispielsweise direkt auf die eigentliche 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 Routingaktivität beizubehalten, aber das Rendern zu verhindern. Dadurch wird der Splash Screen 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 das Branding beibehalten
Wenn du aus Branding-Gründen einen früheren Splash Screen Activity verwenden möchtest, kannst du vom System-Splash Screen zu deinem benutzerdefinierten Splash Screen Activity wechseln, indem du die Animation zum Schließen des Splash Screens anpasst.
Es ist jedoch am besten, dieses Szenario nach Möglichkeit zu vermeiden und die SplashScreen API zu verwenden, um Ihren Splash Screen mit Ihrem Branding zu versehen.
Wenn Sie ein Dialogfeld anzeigen müssen, empfehlen wir, es über der nachfolgenden benutzerdefinierten Splash-Screen-Aktivität oder über der Hauptaktivität nach dem System-Splash-Screen anzuzeigen.
Benutzerdefinierte Aktivität für den Ladebildschirm entfernen
Wir empfehlen, den bisherigen benutzerdefinierten Splash Screen Activity vollständig zu entfernen, um doppelte Splash Screens zu vermeiden, die Effizienz zu steigern und die Ladezeiten des Splash Screens zu verkürzen. Es gibt verschiedene Techniken, mit denen Sie redundante Splash-Screen-Aktivitäten vermeiden können.
Verwenden Sie Lazy Loading für Ihre Komponenten, Module oder Bibliotheken. Vermeiden Sie das Laden oder Initialisieren von Komponenten oder Bibliotheken, die beim Start der App nicht erforderlich sind. Laden Sie sie später, wenn die App sie benötigt.
Wenn Ihre App eine Komponente wirklich benötigt, um ordnungsgemäß zu funktionieren, laden Sie sie nur, wenn sie wirklich benötigt wird, und nicht beim Start. Alternativ können Sie einen Hintergrundthread verwenden, um sie nach dem Start der App zu laden. Halten Sie Ihre
Application.onCreate()so leicht wie möglich.Sie können auch die App Startup-Bibliothek verwenden, um Komponenten beim Start der Anwendung zu initialisieren. Achte dabei darauf, dass alle erforderlichen Module für die Startaktivität geladen werden und keine Ruckler auftreten, wenn die verzögert geladenen Module verfügbar werden.
Erstellen Sie einen Platzhalter, während Sie eine kleine Datenmenge lokal laden. Verwende den empfohlenen Designansatz und halte das Rendering zurück, bis die App bereit ist. Wenn du einen abwärtskompatiblen Splash Screen implementieren möchtest, folge der Anleitung unter Splash Screen länger auf dem Bildschirm anzeigen.
Platzhalter einblenden Bei netzwerkbasierten Ladevorgängen mit unbestimmter Dauer solltest du den Splash Screen schließen und Platzhalter für das asynchrone Laden anzeigen. Erwägen Sie, subtile Animationen auf den Inhaltsbereich anzuwenden, 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 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.