Cómo migrar la implementación de la pantalla de presentación a Android 12 y versiones posteriores

Si implementas una pantalla de presentación personalizada en Android 11 o versiones anteriores, migra tus la app a la API de SplashScreen para ayudarte asegúrate de que se muestre correctamente en Android 12 y versiones posteriores.

A partir de Android 12, el sistema aplica la splash predeterminada del sistema Android. pantalla encendida frío y templado inicios para todas las apps. De forma predeterminada, esta pantalla de presentación del sistema se crea con el elemento del ícono de selector de la app. y el windowBackground de tu si es un solo color.

Si no migras tu app, la experiencia de inicio de tu app en Android 12 y más adelante podría degradarse o tener resultados imprevistos.

  • Si la pantalla de presentación existente se implementa con un tema personalizado que anula android:windowBackground, el sistema reemplaza tu pantalla de presentación personalizada por un sistema Android predeterminado Pantalla de presentación en Android 12 y versiones posteriores Es posible que este no sea el propósito de tu app una experiencia fluida a los desarrolladores.

  • Si la pantalla de presentación existente se implementa con un Activity dedicado, ocurrirá lo siguiente: si inicias tu app en dispositivos con Android 12 o versiones posteriores, obtendrás Pantallas de presentación duplicadas: la pantalla de presentación del sistema seguida de la actividad existente de la pantalla de presentación.

Para evitar estas experiencias degradadas o no deseadas, completa el de migración que se describe en este documento. Después de la migración, la API mejora el tiempo de inicio, te brinda el control total de la experiencia de la pantalla de presentación y crea una experiencia de lanzamiento más coherente con otras apps en la plataforma.

Biblioteca de compatibilidad de SplashScreen

Puedes usar la API de SplashScreen directamente, pero te recomendamos que, en su lugar, uses la biblioteca de compatibilidad de SplashScreen de AndroidX. La biblioteca de compatibilidad usa la API de SplashScreen, habilita la retrocompatibilidad y crea una apariencia coherente para la visualización de la pantalla de presentación en todas las versiones de Android. Este documento se escribió con el estándar biblioteca.

Si migras directamente con la API de SplashScreen en Android 11 y versiones anteriores La pantalla de presentación se verá igual que antes de la migración. A partir del La pantalla de presentación de Android 12 tiene la apariencia de Android 12.

Si migras con la biblioteca de compatibilidad SplashScreen, el sistema mostrará el la misma pantalla de presentación en todas las versiones de Android.

Cómo migrar la implementación de la pantalla de presentación

Completa los siguientes pasos para migrar la pantalla de presentación existente implementación en Android 12 y versiones posteriores.

Este procedimiento aplica para cualquier tipo de implementación desde el que realizas la migración. Si migras desde un Activity dedicado, sigue las prácticas recomendadas que se describen en este documento para adaptar tus pantalla de presentación personalizada Activity. La API de SplashScreen también reduce el inicio. es la latencia que se ingresa con una actividad dedicada de la pantalla de presentación.

Para migrar la pantalla de presentación, haz lo siguiente:

  1. En el archivo build.gradle, cambiar su compileSdkVersion e incluir la biblioteca de compatibilidad SplashScreen en dependencias.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Crea un tema con un elemento superior de Theme.SplashScreen. Establece el valor de postSplashScreenTheme para el tema que debe usar el Activity y el valor de windowSplashScreenAnimatedIcon para un elemento de diseño o una animación elemento de diseño. Los otros atributos son opcionales.

    <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 deseas agregar un color de fondo debajo del ícono, puedes usar el tema Theme.SplashScreen.IconBackground y configurar el atributo windowSplashScreenIconBackground.

  3. En el manifiesto, reemplaza el tema de la actividad inicial por el tema que crear en el paso anterior.

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. Llama a installSplashScreen en la actividad inicial antes de llamar a 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 muestra el objeto de la pantalla de presentación, que puedes usar usar para personalizar la animación o para mantener la pantalla de presentación en la pantalla por más tiempo y el tiempo de actividad. Para obtener más detalles sobre cómo personalizar la animación, consulta Cómo mostrar la pantalla de presentación durante períodos más largos y Personaliza la animación para descartar la pantalla de presentación.

Cómo adaptar el objeto Activity de la pantalla de presentación personalizada a la pantalla de presentación

Después de migrar a la pantalla de presentación para Android 12 y versiones posteriores, decide qué relacionada con la Activity de la pantalla de presentación personalizada anterior. Tienes lo siguiente: Opciones:

  • Conservar la actividad personalizada, pero evitar que se muestre
  • Conserva la actividad personalizada por motivos relacionados con el desarrollo de la marca.
  • Quita la actividad personalizada y adapta tu app según sea necesario.

Impedir que se muestre la actividad personalizada

Si el objeto Activity de la pantalla de presentación anterior se usa principalmente para el enrutamiento, piensa en cómo quitarlos. Por ejemplo, puedes incluir un vínculo directo al o pasar a una actividad singular con subcomponentes. Si este no es el caso factible, puedes usar SplashScreen.setKeepOnScreenCondition para mantener la actividad de enrutamiento en su lugar, pero detener la renderización. Hacerlo transfiere la pantalla de presentación a la siguiente actividad y admite una transición.

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();
    }
  ...
  

Cómo mantener el objeto Activity personalizado para el desarrollo de la marca

Si quieres usar una pantalla de presentación anterior Activity por motivos de desarrollo de la marca, puede pasar de la pantalla de presentación del sistema a la pantalla de presentación personalizada Activity personalizando la animación para descartar la presentación. la pantalla. Sin embargo, te recomendamos evitar esta situación si es posible y usar SplashScreen. API para desarrollar la marca de tu pantalla de presentación.

Si necesitas mostrar un diálogo, se recomienda mostrarlo en la siguiente actividad de la pantalla de presentación personalizada sobre la actividad principal después de la pantalla de presentación del sistema.

Cómo quitar el objeto Activity de la pantalla de presentación personalizada

Por lo general, te recomendamos que quites la pantalla de presentación personalizada Activity anterior en conjunto para evitar la duplicación de pantallas de presentación, aumentar la eficiencia y reducir los tiempos de carga de la pantalla de presentación. Existen diferentes técnicas que que puedes usar para evitar mostrar actividades redundantes en la pantalla de presentación.

  • Usa la carga diferida para tus componentes, módulos o bibliotecas. Evita la carga o inicializar componentes o bibliotecas que no son necesarias para que la aplicación en el lanzamiento. Cargarlos más tarde, cuando la app los necesite.

    Si tu app realmente necesita un componente para funcionar correctamente, cárgalo solo cuando esté realmente necesarias y no en el momento del inicio, o usar un subproceso en segundo plano para cargarlo después de que se inicia la app. Intenta que Application.onCreate() sea lo más liviano posible.

    También puedes beneficiarte con La biblioteca de App Startup para inicializar componentes al iniciar la aplicación. Cuando lo hagas, asegúrate de cargar todos los elementos los módulos requeridos para la actividad de inicio y no introduzcan bloqueos en los cuales los módulos de carga diferida están disponibles.

  • Crea un marcador de posición mientras cargas una pequeña cantidad de datos de manera local. Usa el enfoque recomendado de temas y retiene la renderización hasta que la app se listo. Para implementar una pantalla de presentación que sea retrocompatible, sigue las los pasos descritos en Cómo mostrar la pantalla de presentación durante períodos más largos.

  • Muestra los marcadores de posición. Para las cargas basadas en la red con duraciones indeterminadas, descartar la pantalla de presentación y mostrar marcadores de posición para la carga asíncrona Considera aplicar animaciones sutiles al área de contenido que reflejen el estado de carga. Asegúrate de que la estructura del contenido cargado coincida con el estructura del esqueleto y garantizar una transición sin problemas cuando se carga el contenido.

  • Usa el almacenamiento en caché. Cuando un usuario abre tu app por primera vez, puedes mostrar indicadores de carga para algunos elementos de la IU, como se muestra en la siguiente imagen. El la próxima vez que el usuario regrese a tu aplicación, podrás mostrar este contenido almacenado en caché mientras y cargues contenido más reciente.

.
. Figura 1: Se muestran los marcadores de posición de la IU.