Implementierung des Ladebildschirms zu Android 12 und höher migrieren

Wenn Sie unter Android 11 oder niedriger einen benutzerdefinierten Ladebildschirm implementieren, müssen Sie Ihre App an die SplashScreen API senden, um um zu prüfen, ob sie unter Android 12 und höher korrekt angezeigt wird.

Ab Android 12 wendet das System die Standard-Benachrichtigungseinstellungen 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 eine Farbe hat.

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 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 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 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. 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.

Ladebildschirm-Implementierung 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 den Ladebildschirm:

  1. In der Datei build.gradle ändern Sie Ihre compileSdkVersion und fügen Sie der SplashScreen-Kompatibilitätsbibliothek in Abhängigkeiten.

    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. Legen Sie den Wert für postSplashScreenTheme mit dem Design, das von Activity verwendet werden muss, und dem Wert von windowSplashScreenAnimatedIcon 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 eine Hintergrundfarbe unter Ihrem Symbol hinzufügen möchten, können Sie den Design Theme.SplashScreen.IconBackground und lege fest, windowSplashScreenIconBackground-Attribut.

  3. Ersetzen Sie im Manifest das Design der Startaktivität durch das Design, die 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 vor dem Aufruf auf. super.onCreate().

    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 Ladebildschirm längere Zeit auf dem Bildschirm sehen und Animation zum Schließen des Ladebildschirms 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 einen direkten Link zum oder wechseln Sie zu einer einzelnen Aktivität mit Unterkomponenten. Ist dies nicht der Fall, möglich ist, können Sie SplashScreen.setKeepOnScreenCondition um die Routingaktivität aufrechtzuerhalten, aber nicht mehr zu rendern. 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

Generell empfehlen wir, den vorherigen benutzerdefinierten Ladebildschirm Activity zu entfernen um doppelte Ladebildschirme 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 Komponenten, Module oder Bibliotheken. Laden vermeiden oder die Initialisierung von Komponenten oder Bibliotheken, die für die bei der Markteinführung zu arbeiten. Sie können sie später laden, 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 dein Gerät (Application.onCreate()) so leicht ist wie möglich.

    Außerdem können Sie die App Startup Library zum Initialisieren von Komponenten beim Start einer Anwendung. Achten Sie dabei darauf, erforderliche Module für die Startaktivität und führen Sie keine Janks ein, verzögert geladene Module verfügbar sind.

  • Platzhalter erstellen, während eine kleine Datenmenge lokal geladen wird 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. Ziehen Sie in Betracht, im Inhaltsbereich subtile Animationen anzuwenden, Ladestatus. 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, 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.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">
</ph> Abbildung 1: UI-Platzhalter werden angezeigt.