Migrer l'implémentation de l'écran de démarrage vers Android 12 ou version ultérieure

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 le système Android d'accueil par défaut écran activé froid et tiède démarre pour 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 de lanceur de votre application et la valeur windowBackground de votre 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 un thème personnalisé qui remplace android:windowBackground, Le système remplace votre écran de démarrage personnalisé par un système Android par défaut. l'écran de démarrage sous Android 12 ou version ultérieure. 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 écrans de démarrage en double: l'écran de démarrage du système s'affiche, suivi de votre activité sur l'écran de démarrage.

Vous pouvez éviter ce type d'expérience dégradée ou inattendue en suivant la 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 compat utilise l'API SplashScreen, active de la compatibilité avec les versions antérieures, et crée une apparence cohérente pour l'écran de démarrage. s'affichent 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 sur Android 11 ou version antérieure votre écran de démarrage s'affiche exactement comme avant la migration. À partir du Android 12, l'écran de démarrage a l'aspect général 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 l'é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 au type d'implémentation que vous migrez. Si vous effectuez la migration à partir d'une Activity dédiée, suivez les meilleures pratiques décrites dans ce document pour adapter vos écran de démarrage personnalisé Activity. L'API SplashScreen réduit également le démarrage de latence introduite par une activité d'écran de démarrage dédiée.

Pour migrer votre écran de démarrage, procédez comme suit:

  1. Dans le fichier build.gradle, modifiez votre compileSdkVersion 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'
    }
    
  2. Créez un thème avec un parent de Theme.SplashScreen. Définissez la valeur de postSplashScreenTheme au thème que Activity doit utiliser et à la valeur d'windowSplashScreenAnimatedIcon à un drawable ou un animation drawable. 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 l'icône le thème Theme.SplashScreen.IconBackground et définissez le windowSplashScreenIconBackground.

  3. Dans le fichier manifeste, remplacez le thème de l'activité de démarrage par le thème que vous à l'étape précédente.

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. Appelez installSplashScreen dans l'activité de démarrage avant d'appeler 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 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 ou version ultérieure, déterminez à faire avec votre précédent écran de démarrage personnalisé Activity. Vous disposez des éléments suivants : options:

  • Conserver l'activité personnalisée, mais empêcher son affichage.
  • 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 précédent écran de démarrage Activity est principalement utilisé pour le routage, réfléchissez à des moyens de la supprimer. Par exemple, vous pouvez créer un lien direct vers le site activité ou passer à une activité unique avec des sous-composants. Si ce n'est pas le cas vous pouvez utiliser SplashScreen.setKeepOnScreenCondition pour maintenir l'activité de routage 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 écran de démarrage Activity précédent pour des raisons de branding, vous Vous pouvez passer de l'écran de démarrage du système à votre écran de démarrage personnalisé. Activity en personnalisant l'animation pour fermer l'écran d'accueil. l'écran. Toutefois, il est préférable d'éviter ce scénario dans la mesure du possible et d'utiliser SplashScreen API pour personnaliser 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

En règle générale, nous recommandons 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 différé 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 pour que l'application au lancement. Chargez-les plus tard, lorsque l'application en a besoin.

    Si votre application a réellement 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. Au cours de 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 les étapes décrites dans Conserver l'écran de démarrage à l'écran plus longtemps

  • Afficher 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 du contenu chargé correspond au structure squelette pour que la transition soit fluide 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 la prochaine fois que l'utilisateur reviendra dans votre application, vous pourrez afficher ce contenu mis en cache vous chargez du contenu plus récent.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">
</ph> Figure 1 : Affichage des espaces réservés d'UI.