Administración de estado de WebView

Ícono de calificación de tres estrellas

WebView es un componente de uso general que ofrece un sistema avanzado para la administración de estados. Una WebView debe mantener su estado y posición de desplazamiento en todos los cambios de configuración. Un objeto WebView puede perder la posición de desplazamiento cuando el usuario rota el dispositivo o despliega un teléfono plegable, lo que lo obliga a desplazarse nuevamente desde la parte superior de la WebView hasta la posición de desplazamiento anterior.

Prácticas recomendadas

Minimiza la cantidad de veces que se vuelve a crear un objeto WebView. WebView administra bien su estado y puedes aprovechar esta calidad administrando tantos cambios de configuración como sea posible. Tu app debe controlar los cambios de configuración porque la recreación de Activity (la forma en que el sistema maneja los cambios de configuración) también recrea la WebView, lo que hace que WebView pierda su estado.

Ingredientes

  • android:configChanges: Es el atributo del elemento <activity> del manifiesto. Enumera los cambios de configuración que controla la actividad.
  • View#invalidate(): Es el método que vuelve a dibujar una vista. WebView lo hereda.

Pasos

Para guardar el estado WebView, evita la recreación de Activity tanto como sea posible y, luego, deja que WebView se invalide para que pueda cambiar de tamaño y retener su estado.

1. Agrega cambios de configuración a AndroidManifest.xml

Para evitar la recreación de actividades, especifica los cambios de configuración que maneja tu app (en lugar del sistema):

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

2. Invalida WebView en los cambios de configuración

Kotlin

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

Java

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

Este paso se aplica solo al sistema de vista, ya que Jetpack Compose no necesita invalidar nada para cambiar el tamaño de los Composable elementos correctamente. Sin embargo, Compose vuelve a crear una WebView con frecuencia si no se administra correctamente. Usa el wrapper Accompanist WebView para guardar y restablecer el estado WebViewen tus apps de Compose.

Resultados

Los componentes WebView de tu app ahora retienen su estado y posición de desplazamiento en varios cambios de configuración, desde el cambio de tamaño hasta el cambio de orientación, el plegado y el desplegado.

Recursos adicionales

Para obtener más información sobre los cambios de configuración y cómo administrarlos, consulta Cómo administrar los cambios en la configuración.