Se implementi una schermata iniziale personalizzata in Android 11 o versioni precedenti, esegui la migrazione della tua
app all'API SplashScreen per assicurarti che venga visualizzata correttamente in Android 12 e versioni successive.
A partire da Android 12, il sistema applica la schermata iniziale predefinita del sistema Android agli avvii afreddo e a caldo di tutte le app. Per impostazione predefinita,
questa schermata iniziale di sistema viene creata utilizzando l'elemento dell'icona in Avvio applicazioni dell'app
e windowBackground del
tema, se è un singolo colore.
Se non esegui la migrazione dell'app, l'esperienza di avvio dell'app su Android 12 e versioni successive potrebbe essere peggiorata o avere risultati imprevisti.
Se la schermata iniziale esistente è implementata utilizzando un tema personalizzato che sostituisce
android:windowBackground, il sistema sostituisce la schermata iniziale personalizzata con una schermata iniziale predefinita del sistema Android su Android 12 e versioni successive. Questa potrebbe non essere l'esperienza prevista per la tua app.Se la schermata iniziale esistente è implementata utilizzando un
Activity, l'avvio dell'app sui dispositivi con Android 12 o versioni successive genera schermate iniziali duplicate: viene visualizzata la schermata iniziale di sistema, seguita dall'attività della schermata iniziale esistente.
Puoi evitare queste esperienze peggiorate o impreviste completando la procedura di migrazione descritta in questo documento. Dopo la migrazione, l'API migliora il tempo di avvio, ti offre il controllo completo sull'esperienza della schermata iniziale e crea un'esperienza di avvio più coerente con le altre app sulla piattaforma.
Libreria di compatibilità SplashScreen
Puoi utilizzare l'API SplashScreen direttamente, ma ti consigliamo vivamente di utilizzare invece la
libreria di compatibilità SplashScreen Androidx. La libreria di compatibilità utilizza l'API SplashScreen, consente la compatibilità con le versioni precedenti e crea un aspetto coerente per la visualizzazione della schermata iniziale in tutte le versioni di Android. Questo documento è scritto utilizzando la libreria di compatibilità.
Se esegui la migrazione utilizzando direttamente l'API SplashScreen, su Android 11 e versioni precedenti la schermata iniziale avrà esattamente lo stesso aspetto di prima della migrazione. A partire da Android 12, la schermata iniziale ha l'aspetto di Android 12.
Se esegui la migrazione utilizzando la libreria di compatibilità SplashScreen, il sistema visualizza la stessa schermata iniziale su tutte le versioni di Android.
Esegui la migrazione dell'implementazione della schermata iniziale
Completa i seguenti passaggi per eseguire la migrazione dell'implementazione della schermata iniziale esistente ad Android 12 e versioni successive.
Questa procedura si applica a qualsiasi tipo di implementazione da cui esegui la migrazione. Se esegui la migrazione da un Activity dedicato, segui le best
practice descritte in questo documento per adattare il tuo
schermo iniziale personalizzato Activity. L'API SplashScreen riduce anche la latenza di avvio introdotta con un'attività della schermata iniziale dedicata.
Per eseguire la migrazione della schermata iniziale:
Nel file
build.gradle, modificacompileSdkVersione includi la libreria di compatibilitàSplashScreennelle 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 dipostSplashScreenThemesul tema che l'attivitàActivitydeve utilizzare e il valore diwindowSplashScreenAnimatedIconsu una risorsa disegnabile o una risorsa disegnabile animata. 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 il tema
Theme.SplashScreen.IconBackgrounde impostare l'attributowindowSplashScreenIconBackground.Nel manifest, sostituisci il tema dell'attività di avvio con il tema creato nel passaggio precedente.
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...Chiama
installSplashScreennell'attività di avvio 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 utilizzare facoltativamente per personalizzare l'animazione o per mantenere la schermata iniziale sullo schermo per un periodo di tempo più lungo. Per maggiori dettagli sulla personalizzazione dell'animazione, vedi
Mantenere la schermata iniziale sullo schermo per periodi di tempo più lunghi
e
Personalizzare l'animazione per chiudere la schermata iniziale.
Adatta l'attività Activity della schermata iniziale personalizzata alla schermata iniziale
Dopo aver eseguito la migrazione alla schermata iniziale per Android 12 e versioni successive, decidi cosa fare con l'attività Activity della schermata iniziale personalizzata precedente. Sono disponibili le seguenti opzioni:
- Mantieni l'attività personalizzata, ma impedisci che venga visualizzata.
- Mantieni l'attività personalizzata per motivi di branding.
- Rimuovi l'attività personalizzata e adatta l'app in base alle esigenze.
Impedisci la visualizzazione dell'attività Activity personalizzata
Se l'attività Activity della schermata iniziale precedente viene utilizzata principalmente per il routing, valuta la possibilità di rimuoverla. Ad esempio, puoi collegarti direttamente all'attività effettiva o passare a un'attività singolare con sottocomponenti. Se non è
fattibile, puoi utilizzare
SplashScreen.setKeepOnScreenCondition
per mantenere l'attività di routing, ma impedirne il rendering. In questo modo, la schermata iniziale viene trasferita all'attività successiva e viene supportata una transizione fluida.
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, puoi passare dalla schermata iniziale di sistema alla schermata iniziale personalizzata
Activity personalizzando l'animazione per chiudere la schermata iniziale.
Tuttavia, è preferibile evitare questo scenario, se possibile, e utilizzare l'API SplashScreen per il branding della schermata iniziale.
Se devi visualizzare una finestra di dialogo, ti consigliamo di visualizzarla sopra l'attività della schermata iniziale personalizzata successiva o sopra l'attività principale dopo la schermata iniziale di sistema.
Rimuovi l'attività Activity della schermata iniziale personalizzata
In genere, ti consigliamo di rimuovere completamente l'attività Activity della schermata iniziale personalizzata precedente per evitare la duplicazione delle schermate iniziali, aumentare l'efficienza e ridurre i tempi di caricamento della schermata iniziale. Esistono diverse tecniche che puoi utilizzare per evitare di mostrare attività della schermata iniziale ridondanti.
Utilizza il caricamento lento per componenti, moduli o librerie. Evita di caricare o inizializzare componenti o librerie non necessari per il funzionamento dell'app all'avvio. Caricali in un secondo momento, quando l'app ne ha bisogno.
Se la tua app ha davvero bisogno di un componente per funzionare correttamente, caricalo solo quando è realmente necessario e non al momento dell'avvio oppure utilizza un thread in background per caricarlo dopo l'avvio dell'app. Cerca di mantenere
Application.onCreate()il più leggero possibile.Puoi anche usufruire della libreria App Startup per inizializzare i componenti all'avvio dell'applicazione. In questo caso, assicurati di caricare tutti i moduli richiesti per l'attività di avvio e di non introdurre jank quando i moduli caricati in modo lazy diventano disponibili.
Crea un segnaposto durante il caricamento di una piccola quantità di dati in locale. Utilizza l'approccio di applicazione di temi consigliato e ritarda il rendering finché l'app non è pronta. Per implementare una schermata iniziale compatibile con le versioni precedenti, segui i passaggi descritti in Mantenere la schermata iniziale sullo schermo per periodi di tempo più lunghi.
Mostra segnaposto. Per i caricamenti basati sulla rete con durate indeterminate, chiudi la schermata iniziale e mostra i segnaposto per il caricamento asincrono. Valuta la possibilità di applicare animazioni sottili all'area dei contenuti che riflettano lo stato di caricamento. Assicurati che la struttura dei contenuti caricati corrisponda il più possibile alla struttura dello scheletro per supportare una transizione fluida durante il caricamento dei contenuti.
Utilizza 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 seguente. La volta successiva che l'utente torna alla tua app, puoi mostrare questi contenuti memorizzati nella cache mentre carichi contenuti più recenti.