Manage WebView state

WebView is a commonly used component that offers an advanced system for state management. A WebView must maintain its state and scroll position across configuration changes. A WebView can lose scroll position when the user rotates the device or unfolds a foldable phone, which forces the user to scroll again from the top of the WebView to the previous scroll position.

WebView is good at managing its state. You can take advantage of this quality by managing as many configuration changes as possible to minimize the number of times a WebView is recreated. Your app should handle configuration changes because activity recreation (the system's way of handling configuration changes) recreates the WebView, which causes the WebView to lose state.

Manage state

Avoid Activity recreation as much as possible during configuration changes, and let the WebView invalidate so it can resize while retaining its state.

To manage WebView state:

  • Declare configuration changes handled by your app
  • Invalidate the WebView state

1. Add configuration changes to your app's AndroidManifest.xml file

Avoid activity recreation by specifying the configuration changes handled by your app (rather than by the system):

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

2. Invalidate WebView whenever your app receives a configuration change

Kotlin

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

Java

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

This step applies only to the view system, as Jetpack Compose does not need to invalidate anything to resize Composable elements correctly. However, Compose recreates a WebView often if not managed correctly. Use the Accompanist WebView wrapper to save and restore WebView state in your Compose apps.

Key points

  • android:configChanges: Attribute of the manifest <activity> element. Lists the configuration changes handled by the activity.
  • View#invalidate(): Method that causes a view to be redrawn. Inherited by WebView.

Results

Your app's WebView components now retain their state and scroll position across multiple configuration changes, from resizing to orientation changes to device folding and unfolding.

Collections that contain this guide

This guide is part of these curated Quick Guide collections that cover broader Android development goals:

Enable your app to support an optimized user experience on tablets, foldables, and ChromeOS devices.

Have questions or feedback

Go to our frequently asked questions page and learn about quick guides or reach out and let us know your thoughts.