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 a freddo e alle avvii a caldo per tutte le app. Per impostazione predefinita,
questa schermata iniziale del sistema viene creata utilizzando l'elemento icona in Avvio applicazioni dell'app
e il windowBackground
del
tema, se di un solo colore.
Se non esegui la migrazione della tua app, l'esperienza di lancio dell'app su Android 12 e versioni successive potrebbe essere ridotta o avere risultati indesiderati.
Se la schermata iniziale esistente viene 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 della tua app.Se la tua schermata iniziale esistente viene implementata utilizzando un
Activity
dedicato, l'avvio dell'app su dispositivi con Android 12 o versioni successive genera schermate iniziali duplicate: viene visualizzata la schermata iniziale del sistema, seguita dall'attività esistente nella schermata iniziale.
Puoi evitare queste esperienze ridotte o indesiderate completando la procedura di migrazione descritta 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 utilizzare direttamente l'API SplashScreen
, ma ti consigliamo vivamente di utilizzare la
libreria compatibile con SplashScreen
di Androidx. La libreria di compatibilità utilizza l'API SplashScreen
, consente la compatibilità con le versioni precedenti e crea un aspetto e un design coerenti per la visualizzazione della schermata iniziale in tutte le versioni di Android. Questo documento è stato scritto
utilizzando la libreria compatibile.
Se esegui la migrazione direttamente utilizzando 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 avrà l'aspetto e il design 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 dell'implementazione esistente della schermata iniziale 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 la tua
schermata iniziale personalizzata 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
, modifica il tuocompileSdkVersion
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
sul tema che deve essere utilizzato daActivity
e il valore diwindowSplashScreenAnimatedIcon
su un drawable o animato drawable. 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.IconBackground
e impostare l'attributowindowSplashScreenIconBackground
.Nel file manifest, sostituisci il tema dell'attività iniziale con quello creato 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 utilizzare facoltativamente per personalizzare l'animazione o mantenere la schermata iniziale sullo schermo per un periodo di tempo più lungo. Per ulteriori dettagli sulla personalizzazione dell'animazione, vedi Mantenere la schermata iniziale sullo schermo per periodi più lunghi e Personalizzare 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
fare con la schermata iniziale personalizzata Activity
. Hai a disposizione le seguenti 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 il routing,
valuta dei modi per rimuoverla. Ad esempio, puoi collegarti direttamente all'attività effettiva
o passare a una singola attività con sottocomponenti. Se ciò non è possibile, puoi utilizzare SplashScreen.setKeepOnScreenCondition
per mantenere attiva l'attività di routing ma interromperne il rendering. In questo modo la schermata iniziale viene trasferita all'attività successiva e la transizione viene eseguita senza problemi.
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 Activity
precedente per motivi di branding, puoi
passare dalla schermata iniziale di sistema alla tua schermata iniziale personalizzata
Activity
personalizzando l'animazione per chiudere la
schermata iniziale.
Tuttavia, è meglio evitare questo scenario, se possibile, e utilizzare l'API SplashScreen
per applicare il branding alla schermata iniziale.
Se devi mostrare una finestra di dialogo, ti consigliamo di mostrarla sopra la successiva attività della schermata iniziale personalizzata o sopra l'attività principale dopo la schermata iniziale del sistema.
Rimuovi l'Attività della schermata iniziale personalizzata
In genere, consigliamo di rimuovere del tutto la schermata iniziale personalizzata Activity
per evitare la duplicazione delle schermate iniziali, per aumentare l'efficienza
e ridurre i tempi di caricamento delle schermate iniziali. Puoi utilizzare diverse tecniche
per evitare di mostrare attività ridondanti nella schermata iniziale.
Utilizza il caricamento lento per i componenti, i moduli o le librerie. Evita di caricare o inizializzare componenti o librerie che non sono necessari per il funzionamento dell'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 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 inoltre trarre vantaggio dall'utilizzo della libreria App Startup per inizializzare i componenti all'avvio dell'applicazione. Durante questa operazione, assicurati di caricare comunque tutti i moduli richiesti per l'attività iniziale e di non introdurre 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 l'approccio consigliato per tema e trattieni il rendering finché l'app non è pronta. Per implementare una schermata iniziale compatibile con le versioni precedenti, segui i passaggi descritti in Conservare la schermata iniziale sullo schermo per periodi più lunghi.
Mostra i segnaposto. Per i caricamenti basati sulla rete con durate indeterminate, chiudi la schermata iniziale e mostra i segnaposto per il caricamento asincrono. Potresti applicare all'area dei contenuti animazioni sottili che riflettono lo stato di caricamento. Assicurati che la struttura dei contenuti caricati corrisponda alla struttura dello scheletro per favorire il più possibile una transizione fluida durante il caricamento dei contenuti.
Utilizzare la memorizzazione nella cache. Quando un utente apre la tua app per la prima volta, puoi mostrare gli indicatori di caricamento per alcuni elementi dell'interfaccia utente, come mostrato nella figura che segue. La prossima volta che l'utente torna alla tua app, puoi mostrare questi contenuti memorizzati nella cache mentre carichi contenuti più recenti.