Se implementi una schermata iniziale personalizzata in Android 11 o versioni precedenti, esegui la migrazione
all'API SplashScreen
per aiutarti
assicurati che venga visualizzato correttamente in Android 12 e versioni successive.
A partire da Android 12, il sistema applica la schermata iniziale predefinita del sistema Android
schermo attivo
freddo e caldo
per tutte le app. Per impostazione predefinita,
questa schermata iniziale di sistema è stata creata utilizzando l'elemento icona in Avvio applicazioni della tua app
e i windowBackground
dei tuoi
tema, se è di un solo colore.
Se non esegui la migrazione della tua app, la tua esperienza di lancio su Android 12 e potrebbero essere ridotte o avere risultati indesiderati.
Se la tua schermata iniziale esistente è implementata utilizzando una tema personalizzato che sostituisce
android:windowBackground
, il sistema sostituisce la tua schermata iniziale personalizzata con un sistema Android predefinito schermata iniziale su Android 12 e versioni successive. Questa potrebbe non essere la finalità della tua app un'esperienza senza intervento manuale.Se la tua schermata iniziale esistente è implementata utilizzando un
Activity
dedicato, l'avvio dell'app su dispositivi con Android 12 o versioni successive comporta schermate iniziali duplicate: la schermata iniziale del sistema e l'attività esistente nella schermata iniziale.
Per evitare queste esperienze ridotte o indesiderate, completa la processo di migrazione descritto in questo documento. Dopo la migrazione, l'API migliora i tempi di avvio, ti offre il controllo completo sull'esperienza della schermata iniziale, e crea un'esperienza di lancio più coerente con le altre app della piattaforma.
Raccolta di compatibilità di SplashScreen
Puoi usare direttamente l'API SplashScreen
, ma ti consigliamo vivamente di utilizzare lo
Raccolta di compatibilità SplashScreen
di Androidx
. La libreria compatibile utilizza l'API SplashScreen
, consente
compatibilità con le versioni precedenti e crea un aspetto e un design coerenti per la schermata iniziale
vengono visualizzati in tutte le versioni di Android. Questo documento è stato scritto utilizzando
libreria.
Se esegui la migrazione direttamente utilizzando l'API SplashScreen
, su Android 11 e versioni precedenti
la schermata iniziale sarà esattamente la stessa di prima della migrazione. A partire dal giorno
La schermata iniziale di Android 12 ha lo stesso aspetto di Android 12.
Se esegui la migrazione utilizzando la libreria di compatibilità SplashScreen
, il sistema mostra
la stessa schermata iniziale su tutte le versioni di Android.
Eseguire la migrazione dell'implementazione della schermata iniziale
Completa i seguenti passaggi per eseguire la migrazione della tua schermata iniziale esistente implementazione su Android 12 e versioni successive.
Questa procedura si applica a qualsiasi tipo di implementazione di cui esegui la migrazione
da cui proviene. Se stai eseguendo la migrazione da un Activity
dedicato, segui le best
pratiche descritte in questo documento per adattare
schermata iniziale personalizzata Activity
. L'API SplashScreen
riduce anche l'avvio
di latenza introdotta con un'attività della schermata iniziale dedicata.
Per eseguire la migrazione della schermata iniziale:
Nel file
build.gradle
, cambiacompileSdkVersion
e includi la libreria compatibileSplashScreen
nelle dipendenze.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
Crea un tema con un elemento principale di
Theme.SplashScreen
. Imposta il valore dipostSplashScreenTheme
al tema che deve essere utilizzato daActivity
e valore diwindowSplashScreenAnimatedIcon
a un elemento drawable o animato disegnabile. Gli altri attributi sono facoltativi.<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>
Se vuoi aggiungere un colore di sfondo sotto l'icona, puoi utilizzare lo tema
Theme.SplashScreen.IconBackground
e impostare il AttributowindowSplashScreenIconBackground
.Nel file manifest, sostituisci il tema dell'attività iniziale con quello desiderato. create nel passaggio precedente.
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...
Chiama
installSplashScreen
nell'attività iniziale prima di chiamaresuper.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
restituisce l'oggetto della schermata iniziale, che puoi facoltativamente
utilizza per personalizzare l'animazione o per mantenere la schermata iniziale sullo schermo più a lungo
durata massima. Per maggiori dettagli sulla personalizzazione dell'animazione, vedi
Mantieni la schermata iniziale sullo schermo per periodi più lunghi
e
Personalizza l'animazione per chiudere la schermata iniziale.
Adatta l'attività della schermata iniziale personalizzata alla schermata iniziale
Dopo aver eseguito la migrazione alla schermata iniziale per Android 12 e versioni successive, decidi cosa
a che fare con la precedente schermata iniziale personalizzata Activity
. Hai quanto segue
opzioni:
- Mantenere l'attività personalizzata, ma impedirne la visualizzazione.
- Conserva l'attività personalizzata per motivi di branding.
- Rimuovi l'attività personalizzata e adatta l'app in base alle tue esigenze.
Impedisci la visualizzazione dell'attività personalizzata
Se la schermata iniziale Activity
precedente è utilizzata principalmente per i percorsi,
valutano modi per rimuoverlo. Ad esempio, potresti creare un link diretto
l'attività principale o passare a una singola attività con i sottocomponenti. Se non è
puoi utilizzare
SplashScreen.setKeepOnScreenCondition
per mantenere attiva l'attività di routing ma
interromperne il rendering. In questo modo
trasferisce la schermata iniziale all'attività successiva e supporta una fluida
una transizione.
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(); } ...
Mantieni l'attività personalizzata per il branding
Se vuoi utilizzare una schermata iniziale precedente Activity
per motivi di branding,
può passare dalla schermata iniziale di sistema a quella personalizzata
Activity
personalizzando l'animazione per chiudere la schermata iniziale
schermo.
Tuttavia, è meglio evitare questo scenario, se possibile, e utilizzare lo SplashScreen
un'API per il branding della schermata iniziale.
Se devi visualizzare una finestra di dialogo, consigliamo di mostrarla sopra la successiva attività nella schermata iniziale personalizzata o sopra l'attività principale dopo la schermata iniziale del sistema.
Rimuovi l'Attività della schermata iniziale personalizzata
In genere, ti consigliamo di rimuovere la precedente schermata iniziale personalizzata Activity
del tutto per evitare la duplicazione delle schermate iniziali, per aumentare l'efficienza,
e per ridurre i tempi di caricamento
della schermata iniziale. Esistono diverse tecniche
che puoi utilizzare per evitare di mostrare attività ridondanti nella schermata iniziale.
Utilizza il caricamento lento per i componenti, i moduli o le librerie. Evitare il caricamento o inizializzare componenti o librerie che non sono necessari affinché l'app al momento del lancio. Caricali in un secondo momento, quando l'app ne avrà bisogno.
Se la tua app ha davvero bisogno di un componente per funzionare correttamente, caricalo solo quando è necessario e non al momento del lancio, oppure usa un thread in background per caricarlo dopo l'avvio dell'app. Cerca di fare in modo che il tuo
Application.onCreate()
sia leggero possibile.Puoi anche trarre vantaggio dall'utilizzo Libreria App Startup per inizializzare i componenti all'avvio dell'applicazione. Mentre lo fai, assicurati di caricare comunque tutte le moduli richiesti per l'attività iniziale e non introducono jank in cui diventano disponibili i moduli caricati tramite caricamento lento.
Crea un segnaposto durante il caricamento locale di una piccola quantità di dati. Utilizza la consigliato l'approccio alla tematizzazione e trattieni il rendering finché l'app pronto. Per implementare una schermata iniziale compatibile con le versioni precedenti, segui le i passaggi descritti in Tieni la schermata iniziale sullo schermo per periodi più lunghi.
Mostra i segnaposto. Per i caricamenti basati su rete con durate indeterminate, Chiudi la schermata iniziale e mostra i segnaposto per il caricamento asincrono. Prova ad applicare all'area dei contenuti animazioni sottili che riflettono di caricamento. Assicurati che la struttura dei contenuti caricati corrisponda alla struttura dello scheletro per favorire una transizione fluida al momento del caricamento dei contenuti.
Utilizzare la memorizzazione nella cache. Quando un utente apre la tua app per la prima volta, puoi mostrare indicatori di caricamento per alcuni elementi dell'interfaccia utente, come mostrato nella figura che segue. La La prossima volta che l'utente torna alla tua app, puoi mostrare questi contenuti memorizzati nella cache carichi contenuti più recenti.