Migrar a implementação da tela de apresentação para o Android 12 e versões mais recentes

Se você implementar uma tela de apresentação personalizada no Android 11 ou em versões anteriores, migre o app para a API SplashScreen para ajudar a garantir que ele seja exibido corretamente no Android 12 e em versões mais recentes.

A partir do Android 12, o sistema aplica a tela de apresentação padrão do sistema Android em inicializações a frio e com estado salvo para todos os apps. Por padrão, essa tela de apresentação do sistema é construída usando o elemento de ícone na tela de início do app e o windowBackground do tema, se ele tiver uma única cor.

Se você não migrar o app, a experiência de inicialização no Android 12 e versões mais recentes poderá ser degradada ou ter resultados indesejados.

  • Se a tela de apresentação existente for implementada usando um tema personalizado que substitui android:windowBackground, o sistema vai substituir sua tela de apresentação personalizada por uma tela de apresentação padrão do Android 12 e versões mais recentes. Essa pode não ser a experiência pretendida do seu app.

  • Se a tela de apresentação for implementada usando uma Activity dedicada, a inicialização do app em dispositivos com o Android 12 ou versões mais recentes resultará em telas de apresentação duplicadas: a tela de apresentação do sistema será exibida, seguida pela atividade da tela de apresentação atual.

Para evitar essas experiências degradadas ou não intencionais, conclua o processo de migração descrito neste documento. Após a migração, a API melhora o tempo de inicialização, oferece controle total sobre a experiência da tela de apresentação e cria uma experiência de inicialização mais consistente com outros apps na plataforma.

Biblioteca de compatibilidade SplashScreen

Você pode usar a API SplashScreen diretamente, mas recomendamos o uso da biblioteca de compatibilidade SplashScreen do AndroidX. Essa biblioteca usa a API SplashScreen, permite a compatibilidade com versões anteriores e cria uma aparência consistente para a tela de apresentação em todas as versões do Android. Este documento foi escrito usando a biblioteca de compatibilidade.

Se você migrar usando a API SplashScreen diretamente, no Android 11 e em versões anteriores a tela de apresentação vai ser exatamente igual à anterior. A partir do Android 12, a tela de apresentação tem a aparência do Android 12.

Se você migrar usando a biblioteca de compatibilidade SplashScreen, o sistema vai mostrar a mesma tela de apresentação em todas as versões do Android.

Migrar a implementação da sua tela de apresentação

Conclua as etapas a seguir para migrar a implementação de tela de apresentação existente para o Android 12 e versões mais recentes.

Este procedimento se aplica a qualquer tipo de implementação de onde você esteja migrando. Se você estiver migrando de uma Activity dedicada, siga as práticas recomendadas descritas neste documento para adaptar sua tela de apresentação personalizada Activity. A API SplashScreen também reduz a latência de inicialização introduzida com uma atividade de tela de apresentação dedicada.

Para migrar a tela de apresentação, faça o seguinte:

  1. No arquivo build.gradle, mude seu compileSdkVersion e inclua a biblioteca de compatibilidade SplashScreen nas dependências.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Crie um tema com um pai de Theme.SplashScreen. Defina o valor de postSplashScreenTheme como o tema que a Activity precisa usar e o valor de windowSplashScreenAnimatedIcon como um drawable ou um drawable animado. Os outros atributos são opcionais.

    <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 quiser adicionar uma cor ao plano de fundo abaixo do ícone, use o tema Theme.SplashScreen.IconBackground e defina o atributo windowSplashScreenIconBackground.

  3. No manifesto, substitua o tema da atividade inicial pelo que você criou na etapa anterior.

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. Chame installSplashScreen na atividade inicial antes de 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 retorna o objeto da tela de apresentação, que pode ser usado para personalizar a animação ou manter a tela de apresentação visível por mais tempo. Para mais detalhes sobre como personalizar a animação, consulte Manter a tela de apresentação visível por períodos mais longos e Personalizar a animação para dispensar a tela de apresentação.

Adaptar a atividade de tela de apresentação personalizada à tela de apresentação

Depois de migrar para a tela de apresentação do Android 12 e versões mais recentes, decida o que fazer com a tela de apresentação personalizada anterior Activity. Você tem as seguintes opções:

  • Manter a atividade personalizada, mas impedir que ela seja exibida.
  • Manter a atividade personalizada por motivos de branding.
  • Remova a atividade personalizada e adapte seu app conforme necessário.

Impedir que a atividade personalizada seja exibida

Se a Activity da tela de apresentação anterior for usada principalmente para roteamento, considere como removê-la. Por exemplo, é possível vincular diretamente à atividade real ou usar uma atividade única com subcomponentes. Se isso não for viável, use SplashScreen.setKeepOnScreenCondition para manter a atividade de roteamento, mas impedir a render