Gestione dello stato di WebView

Icona di valutazione a tre stelle

WebView è un componente di uso comune che offre un sistema avanzato per la gestione dello stato. Un WebView deve mantenere il proprio stato e la posizione di scorrimento in seguito alle modifiche alla configurazione. Un WebView può perdere la posizione di scorrimento quando l'utente ruota il dispositivo o apre uno smartphone pieghevole, il che lo costringe a scorrere di nuovo dall'inizio del WebView fino alla posizione di scorrimento precedente.

Best practice

Riduci al minimo il numero di volte in cui viene ricreato un WebView. WebView è in grado di gestire il proprio stato e puoi sfruttare questa qualità gestendo il maggior numero possibile di modifiche alla configurazione. La tua app deve gestire le modifiche alla configurazione perché la ricreazione di Activity (il modo in cui il sistema gestisce le modifiche alla configurazione) ricrea anche WebView, che causa la perdita dello stato di WebView.

Ingredienti

  • android:configChanges: attributo dell'elemento <activity> del file manifest. Elenca le modifiche alla configurazione gestite dall'attività.
  • View#invalidate(): metodo che causa il ridisegno di una visualizzazione. Ereditato da WebView.

Passaggi

Per salvare lo stato di WebView, evita la ricreazione di Activity il più possibile, quindi lascia che WebView venga invalidato in modo che possa essere ridimensionato mantenendo il suo stato.

1. Aggiungi modifiche alla configurazione a AndroidManifest.xml

Evita la ricreazione dell'attività specificando le modifiche alla configurazione gestite dalla tua app (anziché dal sistema):

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

2. Invalidare WebView in caso di modifiche alla configurazione

Kotlin

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

Java

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

Questo passaggio si applica solo al sistema di visualizzazione, poiché Jetpack Compose non deve invalidare nulla per ridimensionare correttamente gli elementi Composable. Tuttavia, Compose ricrea spesso un WebView se non viene gestito correttamente. Utilizza il wrapper WebView di Accompanist per salvare e ripristinare lo stato di WebView nelle tue app Compose.

Risultati

I componenti WebView della tua app ora mantengono lo stato e la posizione di scorrimento in seguito a più modifiche alla configurazione, dal ridimensionamento al cambio di orientamento, fino alla chiusura e all'apertura.

Risorse aggiuntive

Per scoprire di più sulle modifiche alla configurazione e su come gestirle, consulta Gestire le modifiche alla configurazione.