9

我有一个 FragmentPagerAdapter 用于显示大约 6 个选项卡,所有这些选项卡都从 Web 服务器加载它们的数据。其中一个选项卡包含一个从我的服务器加载图像的 WebView。生成图像的服务器端成本很高,因此我想减少重新加载 WebView 的调用次数。对于非 WebView 选项卡,我已经能够保存我的状态(对于那些,只是一个简单的数组)并在选项卡被刷过时恢复它们。

问题:

  • 每次我使用 FragmentPagerAdapter 滑回 WebView 时,它都会重新加载,这会导致我的 Web 服务器的重新加载时间和负载很高。

考虑的解决方案:

  • 使用ViewPager.setOffscreenPageLimit() 这是有问题的,因为它会强制加载更多选项卡,即使它们永远不会被查看。这在我的服务器上是不必要的昂贵。
  • 使用WebView.saveState()WebView.restoreState() 文档已经更新,明确显示状态在这里不再维护,所以这对于这种场景不再有用。
  • 将我的活动设置为: android:configChanges="keyboardHidden|orientation|screenSize" 这适用于旋转情况,但不影响 ViewPager/FragmentPagerAdapter 在选项卡情况下滑动。

听起来WebView.saveState()的旧行为会很完美......

4

1 回答 1

13

问题似乎是你正在抹杀自己的结果。

虽然您需要一个新WebView的配置更改,但您不需要一个新的WebView。而且,如果您已经拥有WebView,则不必告诉它做任何事情。

所以,我会试试这个:

  • 保留您在片段的数据成员中WebView创建的内容onCreateView()
  • onCreateView()当该数据成员为null
  • loadUrl()在您膨胀布局时才调用

(如果您正在创建WebViewin Java 代码,请将“inflate the layout”替换为“create the WebViewvia its constructor”)

如果片段的内容超过WebView,您还需要保留在数据成员中膨胀的根视图,以便您可以从onCreateView().

于 2013-01-27T21:49:29.227 回答