Si vous implémentez un écran de démarrage personnalisé sous Android 11 ou version antérieure, migrez votre
l'application à l'API SplashScreen
pour vous aider
vous assurer qu'elle s'affiche correctement sur Android 12 ou version ultérieure.
À partir d'Android 12, le système applique l'écran de démarrage par défaut du système Android aux démarrages à froid et à chaud de toutes les applications. Par défaut, cet écran de démarrage du système est construit à l'aide de l'élément d'icône du lanceur de votre application et de l'windowBackground
de votre thème, s'il s'agit d'une seule couleur.
Si vous ne migrez pas votre application, votre expérience de lancement sur Android 12 et peuvent être dégradés ou avoir des résultats inattendus.
Si votre écran de démarrage existant est implémenté à l'aide d'un thème personnalisé qui remplace
android:windowBackground
, le système remplace votre écran de démarrage personnalisé par un écran de démarrage système Android par défaut sur Android 12 et versions ultérieures. Ce n'est peut-être pas le but de votre application expérience.Si votre écran de démarrage existant est implémenté à l'aide d'un
Activity
dédié, le lancement de votre application sur des appareils équipés d'Android 12 ou version ultérieure entraîne la duplication de l'écran de démarrage : l'écran de démarrage du système s'affiche, suivi de votre activité d'écran de démarrage existante.
Vous pouvez éviter ces expériences dégradées ou involontaires en suivant le processus de migration décrit dans ce document. Une fois la migration effectuée, l'API améliore le temps de démarrage, vous donne un contrôle total sur l'expérience de l'écran de démarrage, et crée une expérience de lancement plus cohérente avec les autres applications de la plateforme.
Bibliothèque de compatibilité SplashScreen
Vous pouvez utiliser l'API SplashScreen
directement, mais nous vous recommandons vivement d'utiliser la
Bibliothèque de compatibilités AndroidX pour SplashScreen
à la place. La bibliothèque de compatibilité utilise l'API SplashScreen
, active la rétrocompatibilité et crée une apparence cohérente pour l'affichage de l'écran de démarrage sur toutes les versions d'Android. Ce document est écrit à l'aide de la méthode
bibliothèque.
Si vous effectuez la migration directement à l'aide de l'API SplashScreen
, votre écran de démarrage est exactement le même qu'avant la migration sur Android 11 et versions antérieures. À partir d'Android 12, l'écran de démarrage a l'apparence d'Android 12.
Si vous effectuez la migration à l'aide de la bibliothèque de compatibilité SplashScreen
, le système affiche le
même écran de démarrage sur
toutes les versions d'Android.
Migrer l'implémentation de votre écran de démarrage
Procédez comme suit pour migrer votre écran de démarrage existant vers Android 12 et versions ultérieures.
Cette procédure s'applique à tous les types d'implémentations à partir desquels vous effectuez la migration. Si vous migrez à partir d'un Activity
dédié, suivez les bonnes pratiques décrites dans ce document pour adapter votre Activity
d'écran de démarrage personnalisé. L'API SplashScreen
réduit également le démarrage
latence introduite par une activité d'écran de démarrage dédiée.
Pour migrer votre écran de démarrage, procédez comme suit:
Dans le fichier
build.gradle
, modifiez votrecompileSdkVersion
et incluez la bibliothèque de compatibilitéSplashScreen
dans les dépendances.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
Créez un thème avec un parent de
Theme.SplashScreen
. Définissez la valeur depostSplashScreenTheme
sur le thème queActivity
doit utiliser et la valeur dewindowSplashScreenAnimatedIcon
sur un drawable standard ou un drawable animé. Les autres attributs sont facultatifs.<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>
Si vous souhaitez ajouter une couleur d'arrière-plan sous votre icône, vous pouvez utiliser le thème
Theme.SplashScreen.IconBackground
et définir l'attributwindowSplashScreenIconBackground
.Dans le fichier manifeste, remplacez le thème de l'activité de démarrage par celui que vous créez à l'étape précédente.
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...
Appelez
installSplashScreen
dans l'activité de démarrage avant d'appelersuper.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
renvoie l'objet d'écran de démarrage, que vous pouvez éventuellement
utiliser pour personnaliser l'animation ou pour garder l'écran de démarrage affiché plus longtemps
de la vidéo. Pour en savoir plus sur la personnalisation de l'animation, consultez
Conserver l'écran de démarrage à l'écran plus longtemps
et
Personnalisez l'animation pour fermer l'écran de démarrage.
Adapter votre activité sur l'écran de démarrage personnalisée à l'écran de démarrage
Après avoir migré vers l'écran de démarrage pour Android 12 et versions ultérieures, décidez de ce que vous souhaitez faire de votre ancien écran de démarrage personnalisé Activity
. Vous avez le choix entre les options suivantes :
- Conservez l'activité personnalisée, mais empêchez-la de s'afficher.
- Conservez l'activité personnalisée pour des raisons de branding.
- Supprimez l'activité personnalisée et adaptez votre application si nécessaire.
Empêcher l'affichage de l'activité personnalisée
Si votre écran de démarrage précédent Activity
est principalement utilisé pour le routage, envisagez de le supprimer. Par exemple, vous pouvez créer un lien direct vers l'activité réelle ou passer à une activité unique avec des sous-composants. Si ce n'est pas possible, vous pouvez utiliser SplashScreen.setKeepOnScreenCondition
pour conserver l'activité de calcul d'itinéraire en place, mais l'empêcher de s'afficher. Procéder à cette opération
transfère l'écran de démarrage vers l'activité suivante et offre une expérience fluide
transition.
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(); } ...
Conserver l'activité personnalisée pour le branding
Si vous souhaitez utiliser un Activity
d'écran de démarrage précédent pour des raisons de branding, vous pouvez passer de l'écran de démarrage du système à votre Activity
d'écran de démarrage personnalisé en personnalisant l'animation de fermeture de l'écran de démarrage.
Toutefois, il est préférable d'éviter ce scénario si possible et d'utiliser l'API SplashScreen
pour apposer votre marque sur votre écran de démarrage.
Si vous devez afficher une boîte de dialogue, nous recommandez de l'afficher lors de l'activité personnalisée ultérieure de l'écran de démarrage ; ou sur l'activité principale après l'écran de démarrage du système.
Supprimer l'activité personnalisée sur l'écran de démarrage
Nous recommandons généralement de supprimer l'ancien écran de démarrage personnalisé Activity
.
pour éviter la duplication des écrans de démarrage, pour accroître l'efficacité,
et pour réduire le temps de chargement de l'écran de démarrage. Il existe différentes
techniques qui
pour éviter d'afficher des activités redondantes sur l'écran de démarrage.
Utilisez le chargement paresseux pour vos composants, modules ou bibliothèques. Éviter le chargement ou l'initialisation de composants ou de bibliothèques qui ne sont pas nécessaires à l'application au lancement. Chargez-les plus tard, lorsque l'application en a besoin.
Si votre application a vraiment besoin d'un composant pour fonctionner correctement, chargez-le uniquement et non au moment du lancement, ou utilisez un thread d'arrière-plan pour le charger. après le démarrage de l'application. Essayez de garder votre
Application.onCreate()
aussi léger que possible.Vous pouvez également utiliser Bibliothèque App Startup pour initialiser les composants au démarrage de l'application. Lorsque vous effectuez cette opération, assurez-vous de charger modules requis pour l'activité de démarrage et n'introduisent pas d'à-coups si le les modules chargés de manière différée deviennent disponibles.
Créez un espace réservé tout en chargeant une petite quantité de données localement. Utilisez les l'approche de thématisation recommandée et retarder l'affichage jusqu'à ce que l'application prêt. Pour implémenter un écran de démarrage rétrocompatible, suivez les étapes décrites dans la section Maintenir l'écran de démarrage à l'écran pendant de plus longues périodes.
Affichez les espaces réservés. Pour les chargements basés sur le réseau dont la durée est indéterminée, Fermer l'écran de démarrage et afficher des espaces réservés pour le chargement asynchrone Pensez à appliquer à la zone de contenu des animations subtiles qui reflètent état de chargement. Assurez-vous que la structure de contenu chargée correspond le mieux possible à la structure du squelette pour faciliter la transition lors du chargement du contenu.
Utilisez la mise en cache. Lorsqu'un utilisateur ouvre votre application pour la première fois, vous pouvez lui montrer des indicateurs de chargement pour certains éléments de l'interface utilisateur, comme illustré dans la figure suivante. La prochaine fois que l'utilisateur reviendra dans votre application, vous pourrez afficher ce contenu mis en cache pendant que vous chargez du contenu plus récent.