Cómo administrar el estado de WebView

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.

WebView administra bien su estado. Puedes aprovechar esta calidad administrando tantos cambios de configuración como sea posible para minimizar la cantidad de veces que se vuelve a crear un WebView. Tu app debe controlar los cambios de configuración porque la recreación de actividades (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.

Administrará el estado

Evita la recreación de Activity tanto como sea posible durante los cambios de configuración y deja que se invalide WebView para que pueda cambiar de tamaño y retener su estado.

Para administrar el estado de WebView, haz lo siguiente:

  • Declara los cambios de configuración que controla tu app
  • Invalida el estado WebView

1. Agrega cambios de configuración al archivo AndroidManifest.xml de tu app

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 cada vez que tu app recibe un cambio 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 elementos Composable correctamente. Sin embargo, Compose vuelve a crear una WebView con frecuencia si no se administra correctamente.

Puntos clave

  • 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. Lo hereda WebView.

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 del dispositivo.

Colecciones que contienen esta guía

Esta guía forma parte de estas colecciones de guías rápidas seleccionadas que abarcan objetivos más amplios de desarrollo de Android:

Habilita tu app para que admita una experiencia del usuario optimizada en tablets, dispositivos plegables y ChromeOS.

Tienes preguntas o comentarios

Ve a nuestra página de preguntas frecuentes para obtener información sobre las guías rápidas o comunícate con nosotros para contarnos tu opinión.