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-Splashscreen des Android-Systems bei Kaltstarts und Warmstarts für alle Apps verwendet. Standardmäßig wird dieser System-Startbildschirm mit dem Launcher-Symbolelement Ihrer App und der windowBackground
Ihres Themas erstellt, sofern es sich um eine einfarbige Farbe handelt.
Wenn du deine App nicht migrierst, wird der App-Start unter Android 12 und kann verschlechtert sein oder zu unbeabsichtigten Ergebnissen führen.
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 dein vorhandener Ladebildschirm mit einem eigenen
Activity
implementiert wird, wenn ihr eure App auf Geräten mit Android 12 oder höher startet, Duplizierte Startbildschirme: Ladebildschirm des Systems wird angezeigt, gefolgt von der aktuellen Aktivität auf dem Ladebildschirm.
Sie können dies verhindern, indem Sie die Migrationsprozess, der in diesem Dokument beschrieben wird. Nach der Migration enthält die API verkürzt die Startzeit, gibt Ihnen volle Kontrolle über den Ladebildschirm und sorgt für ein einheitlicheres Launch-Erlebnis mit anderen Apps auf der Plattform.
SplashScreen-kompatible Bibliothek
Sie können die SplashScreen
API direkt verwenden, wir empfehlen jedoch dringend die Verwendung des
AndroidX-SplashScreen
-kompatible Bibliothek
. Die Compat-Bibliothek verwendet die SplashScreen
API, ermöglicht
Abwärtskompatibilität und sorgt für ein einheitliches Erscheinungsbild des Ladebildschirms
die auf allen Android-Versionen
angezeigt werden sollen. 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. Beginnt am
Der Ladebildschirm von Android 12 ähnelt dem Design von Android 12.
Wenn Sie mit der kompatiblen SplashScreen
-Bibliothek migrieren, zeigt das System die
auf allen Android-Versionen
immer den gleichen Ladebildschirm.
Implementierung des Ladebildschirms migrieren
Führen Sie die folgenden Schritte aus, um Ihren bestehenden Ladebildschirm zu migrieren Implementierung auf Android 12 und höher.
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 reduziert auch die Startlatenz, die durch eine spezielle Ladebildschirmaktivität verursacht wird.
So migrieren Sie Ihren Splashscreen:
In der Datei
build.gradle
ändern Sie IhrecompileSdkVersion
und fügen Sie derSplashScreen
-Kompatibilitätsbibliothek in Abhängigkeiten.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
Erstellen Sie ein Design mit einem übergeordneten Element von
Theme.SplashScreen
. Legen Sie den Wert fürpostSplashScreenTheme
mit dem Design, das vonActivity
verwendet werden muss, und dem Wert vonwindowSplashScreenAnimatedIcon
in ein Drawable oder animiert 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 AttributwindowSplashScreenIconBackground
festlegen.Ersetzen Sie im Manifest das Thema der Startaktivität durch das Thema, 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
installSplashScreen
in der Startaktivität auf, 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 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 Ladebildschirm an den Ladebildschirm anpassen
Entscheiden Sie nach der Migration zum Ladebildschirm für Android 12 und höher,
die mit dem benutzerdefinierten Ladebildschirm (Activity
) zu tun haben. Du hast Folgendes
Optionen:
- Die benutzerdefinierte Aktivität beibehalten, aber nicht anzeigen.
- Behalten Sie die benutzerdefinierte Aktivität aus Brandinggrü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 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. Vorgehensweise
überträgt den Ladebildschirm auf die nächste Aktivität und unterstützt einen flüssigen
zu übertragen.
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
für Branding-Gründe verwenden möchtest, musst du
kann vom System-Ladebildschirm zu Ihrem benutzerdefinierten Ladebildschirm wechseln
Activity
, indem die Animation zum Schließen des Begrüßungsbildschirms angepasst wird
.
Es ist jedoch ratsam, dieses Szenario nach Möglichkeit zu vermeiden und die SplashScreen
zu verwenden
API für das Branding Ihres Ladebildschirms
Wenn Sie ein Dialogfeld anzeigen müssen, empfehlen wir, es über der nachfolgenden benutzerdefinierten Splashscreen-Aktivität oder über der Hauptaktivität nach dem Systemstartbildschirm einzublenden.
Benutzerdefinierte Aktivität für den Splashscreen entfernen
Activity
Wir 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 Techniken,
können Sie redundante Ladebildschirme vermeiden.
Verwenden Sie Lazy Loading für Ihre Komponenten, Module oder Bibliotheken. Laden vermeiden oder die Initialisierung von Komponenten oder Bibliotheken, die für die bei der Markteinführung zu arbeiten. Sie werden erst später geladen, wenn die App sie benötigt.
Wenn Ihre App eine Komponente wirklich benötigt, um richtig zu funktionieren, laden Sie sie nur, wenn sie wirklich benötigten und nicht zum Zeitpunkt des Starts erforderlich ist, oder verwende zum Laden einen Hintergrundthread. nachdem die App gestartet wurde. Achte darauf, dass
Application.onCreate()
so leicht ist wie möglich.Sie können auch die App Startup Library zum Initialisieren von Komponenten beim Start einer Anwendung. 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.
Erstellen Sie einen Platzhalter, während Sie eine kleine Menge an Daten lokal laden. Verwenden Sie die Methode empfohlenen Themesansatzes und halten das Rendering bis zur bereit. Wenn Sie einen abwärtskompatiblen Splashscreen implementieren möchten, folgen Sie der Anleitung unter Splashscreen länger auf dem Bildschirm anzeigen.
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 des geladenen Inhalts mit der Skelettstruktur so gut wie möglich, 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 Ladesymbole anzeigen, wie in der folgenden Abbildung dargestellt. Die Wenn der Nutzer das nächste Mal zu Ihrer App zurückkehrt, können Sie diesen im Cache gespeicherten Inhalt anzeigen, während neuere Inhalte laden.