我有一个FragmentPagerAdapter,用于显示大约6个标签,所有标签都从Web服务器加载其数据。其中一个标签包含一个WebView,它从我的服务器加载图像。生成图像的服务器端成本很高,因此我想减少重新加载WebView的调用次数。对于非WebView选项卡,我已经能够保存状态(对于那些只是简单的数组),并在滑动选项卡时恢复它们。
问题:
- 每次使用FragmentPagerAdapter向后滑动到WebView时,WebView都会重新加载,导致重新加载时间长,对我的Web服务器负载高。
- 使用ViewPager.setOffscreenPageLimit()。这会强制加载更多的标签,即使它们永远不会被查看。这在我的服务器上是不必要的昂贵操作。
- 使用WebView.saveState()和WebView.restoreState()。文档已更新,明确表示显示状态不再在此处维护,因此对于此场景不再有用。
- 将我的活动设置为:android:configChanges="keyboardHidden|orientation|screenSize"。这适用于旋转情况,但不影响ViewPager/FragmentPagerAdapter通过选项卡滑动的情况。
听起来旧的WebView.saveState()的行为会很完美...
WebView
本身对分页器和片段是毫不知情的,所以某个地方的某人正在做一些事情来触发WebView
的重新加载。然后,您可以尝试抑制此行为。 - CommonsWareFragmentPagerAdapter
,滑动会导致片段被销毁。FragmentPagerAdapter
是“PagerAdapter的实现,将每个页面表示为片段,并将其作为用户可以返回到该页面而持久保存在片段管理器中的片段。” “在onCreateView中,我有以下内容” - 您确定每次滑动时都会调用onCreateView()
,即使是以前查看过的页面吗? - CommonsWare