管理 WebView 状态

WebView 是一个常用的组件,提供了一套先进的状态管理系统。WebView 必须在配置变更时保持其状态和滚动位置。WebView 在用户旋转设备或展开折叠屏手机时可能会丢失滚动位置,这会迫使用户从 WebView 的顶部重新滚动到之前的滚动位置。

WebView 擅长管理其状态。你可以利用这一特性,尽可能地管理配置变更,以最大程度地减少 WebView 被重新创建的次数。你的应用应该处理配置变更,因为 Activity 重建(系统处理配置变更的方式)会重新创建 WebView,从而导致 WebView 丢失状态。

管理状态

在配置变更期间,尽可能避免重新创建 Activity,并让 WebView 失效,以便其在保持状态的同时进行大小调整。

如何管理 WebView 状态

  • 声明由你的应用处理的配置变更
  • 使 WebView 状态失效

1. 在应用的 AndroidManifest.xml 文件中添加配置变更

通过指定由你的应用(而非系统)处理的配置变更来避免 Activity 重建

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

2. 每当应用收到配置变更时,使 WebView 失效

Kotlin

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

Java

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

此步骤仅适用于视图系统,因为 Jetpack Compose 无需使任何内容失效即可正确调整 Composable 元素的大小。但是,如果管理不当,Compose 仍会频繁重新创建 WebView

要点

结果

你的应用的 WebView 组件现在可以在多种配置变更(从调整大小到方向变更再到设备折叠和展开)中保留其状态和滚动位置。

包含本指南的合集

本指南是以下精选快速指南合集的一部分,这些合集涵盖了更广泛的 Android 开发目标

使你的应用能够在平板电脑、折叠屏设备和 ChromeOS 设备上支持优化的用户体验。

有问题或反馈

前往我们的常见问题页面了解快速指南,或联系我们并告诉我们你的想法。