Gerenciar o estado da WebView

O WebView é um componente usado com frequência e que oferece um sistema avançado para gerenciamento de estado. Um WebView precisa manter o estado e a posição de rolagem durante as mudanças de configuração. Um WebView pode perder a posição de rolagem quando o usuário gira o dispositivo ou desdobra um smartphone dobrável, o que força o usuário a rolar novamente da parte de cima do WebView para a posição de rolagem anterior.

O WebView é bom em gerenciar o estado. Você pode aproveitar essa qualidade gerenciando o maior número possível de mudanças de configuração para minimizar o número de vezes que um WebView é recriado. Seu app precisa processar mudanças de configuração porque a recriação de atividades (a maneira como o sistema processa mudanças de configuração) recria a WebView, o que faz com que ela perca o estado.WebView

Resultados

Os componentes do WebView do app mantêm o estado e a posição de rolagem em várias mudanças de configuração, desde o redimensionamento e mudança de orientação até a dobra e o desdobramento do dispositivo.

Gerenciar estado

Evite ao máximo a recriação de atividades durante mudanças de configuração e deixe o WebView ser invalidado para que possa ser redimensionado, mantendo o estado.

Para gerenciar o estado do WebView:

  • Declarar mudanças de configuração processadas pelo app
  • Invalidar o estado WebView

1. Adicionar mudanças de configuração ao arquivo AndroidManifest.xml do app

Para evitar a recriação de atividades, especifique as mudanças de configuração processadas pelo app, e não pelo sistema:

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

2. Invalidar o WebView sempre que o app receber uma mudança de configuração

Kotlin

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

Java

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

Esta etapa se aplica apenas ao sistema de visualização, já que o Jetpack Compose não precisa invalidar nada para redimensionar corretamente os elementos Composable. No entanto, o Compose recria um WebView com frequência quando ele não é gerenciado corretamente.

Pontos principais

  • android:configChanges: atributo do elemento <activity> do manifesto. Lista as mudanças de configuração gerenciadas pela atividade.
  • View#invalidate(): método que faz com que uma visualização seja redesenhada. Herdado por WebView.

Coleções que contêm este guia

Este guia faz parte das coleções de guias rápidos selecionados que abrangem objetivos mais amplos de desenvolvimento para Android:

Permita que seu app ofereça uma experiência do usuário otimizada em tablets, dispositivos dobráveis e ChromeOS.

Tem dúvidas ou quer dar feedback?

Acesse nossa página de perguntas frequentes e confira guias rápidos ou entre em contato para compartilhar sua opinião.