Gerenciamento de estado do WebView

Ícone de classificação de três estrelas

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.

Práticas recomendadas

Minimize o número de vezes que um WebView é recriado. O WebView é bom em gerenciar o estado, e você pode aproveitar essa qualidade gerenciando o maior número possível de mudanças de configuração. Seu app precisa processar mudanças de configuração, porque a recriação da Activity (a maneira como o sistema processa essas mudanças) também recria o WebView, o que faz com que o WebView perca o estado.

Ingredientes

  • 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.

Etapas

Para salvar o estado do WebView, evite ao máximo a recriação do Activity e deixe o WebView ser invalidado para que possa ser redimensionado, mantendo o estado.

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

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 WebView em mudanças 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 se não for gerenciado corretamente. Use o wrapper Accompanist WebView para salvar e restaurar o estado WebView nos apps do Compose.

Resultados

Os componentes WebView do app agora 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.

Outros recursos

Para saber mais sobre as mudanças de configuração e como elas são gerenciadas, consulte Gerenciar mudanças de configuração.