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 wendet das System die Standard-Benachrichtigungen
Display an
kalt und warm
für alle Apps. Standardmäßig
Dieser Ladebildschirm wird mit dem Launcher-Symbolelement Ihrer App erstellt
und die windowBackground
Ihrer
wenn es nur 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 Ladebildschirm mit einem benutzerdefiniertes Design, das
android:windowBackground
überschreibt, Das System ersetzt deinen individuellen Ladebildschirm durch ein standardmäßiges Android-System. Ladebildschirms mit Android 12 und höher. Das ist möglicherweise nicht beabsichtigt Nutzererfahrung.Wenn Ihr vorhandener Startbildschirm mit einer speziellen
Activity
implementiert ist, führt das Starten Ihrer App auf Geräten mit Android 12 oder höher zu doppelten Startbildschirmen: zuerst wird der Systemstartbildschirm und dann die vorhandene Startbildschirmaktivität angezeigt.
Sie können dies verhindern, indem Sie die Migrationsprozess, der in diesem Dokument beschrieben wird. Nach der Migration verbessert die API die Startzeit, bietet Ihnen die volle Kontrolle über den Startbildschirm und sorgt für eine einheitlichere Startbildschirmanzeige 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 die Abwärtskompatibilität und sorgt für ein einheitliches Erscheinungsbild des Startbildschirms in allen Android-Versionen. Dieses Dokument wurde mit dem Compat geschrieben.
Bibliothek.
Wenn Sie direkt über die SplashScreen
API migrieren, unter Android 11 und niedriger
sieht der Ladebildschirm genauso aus wie vor der Migration. Ab Android 12 entspricht der Startbildschirm dem Erscheinungsbild 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 für jede Art von Implementierung, die Sie migrieren.
aus. Wenn Sie von einem dedizierten Activity
migrieren, befolgen Sie die besten
die in diesem Dokument beschriebene Methoden zur
Benutzerdefinierter Ladebildschirm Activity
. Die SplashScreen
API reduziert außerdem die Startzeit.
Latenz, die durch einen speziellen Ladebildschirm 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 Thema mit
Theme.SplashScreen
als übergeordnetes Element. 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 Design der Startaktivität durch das Design, 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 Ladebildschirmobjekt zurück, das Sie optional
Hiermit können Sie Animationen anpassen oder den Ladebildschirm länger anzeigen lassen.
Dauer 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 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:
überlege dir, wie du sie entfernen kannst. 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 ein Dialogfeld angezeigt werden muss, empfehlen, ihn über der nachfolgenden benutzerdefinierten Aktivität auf dem Ladebildschirm oder Hauptaktivität nach dem Systemstartbildschirm.
Benutzerdefinierte Aktivität für den Ladebildschirm 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 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 für die Funktion der App beim Starten nicht erforderlich sind. 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-Startbibliothek verwenden, um Komponenten beim Starten der Anwendung zu initialisieren. 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 Ladebildschirm implementieren möchten, der abwärtskompatibel ist, folgen Sie der die in den Lade den Ladebildschirm länger auf dem Bildschirm.
Platzhalter einblenden: Bei netzwerkbasierten Ladevorgängen mit unbestimmter Dauer Ladebildschirm schließen und Platzhalter für asynchrones Laden einblenden. Verwenden Sie subtile Animationen, die die Ladestatus. 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.
Caching verwenden Wenn ein Nutzer Ihre App zum ersten Mal öffnet, für einige UI-Elemente, 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.