9

FragmentPagerAdapter を使用して約 6 つのタブを表示し、そのすべてが Web サーバーからデータをロードします。タブの 1 つに、サーバーから画像を読み込む 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

問題は、自分の結果を一掃していることにあるようです。

構成の変更には new が必要ですが、それ以外の場合WebViewは new は必要ありませんWebView。また、すでに を持っている場合はWebView、何もするように指示する必要はありません。

だから、私はこれを試してみます:

  • フラグメントのデータ メンバーでWebView作成した を保持します。onCreateView()
  • そのデータメンバーonCreateView()null
  • loadUrl()レイアウトを膨張させた場合にのみ呼び出す

(Java コードで作成する場合は、WebView「レイアウトをインフレートする」を「WebViewコンストラクターを介して作成する」に置き換えます)

フラグメントの内容が より多い場合はWebView、データ メンバーで膨らませたルート ビューも保持する必要があるため、 からそれを返すことができますonCreateView()

于 2013-01-27T21:49:29.227 に答える