私の教育用アプリケーションには、横向きモードと縦向きモードをサポートする 6 ~ 7 個のタブを持つタブ ホストがあります。タブに関連付けられたすべてのアクティビティで、選択用のチェックボックスと評価バー、ボタンなどを使用して、リストビューでいくつかの学生レコードを表示しています.Webサービス呼び出しを介してリモートサーバーからこれらの学生レコードを取得しています. 何らかの理由で、私のアプリは、いくつかのアクション/検索を実行した後、いくつかのボタンを含む 1 つの初期相対レイアウトを表示します。リスト ビューでリスト項目またはボタンをクリックすると、リスト ビューに結果が表示されます。他のレイアウトを表示しています。これは、タブ ホストのすべてのアクティビティに適用されます。
ユーザーが向きを変更した場合、同じ状態または同じ画面を復元する必要があります。つまり、ユーザーが以前にレコードのリストを表示していた場合は、レコードのリストを表示する必要があり、初期の場合は初期のみを表示する必要があります。向きの変更やオーバーライド時に Android の破棄アクティビティを強制的に停止したくありませんpublic Object onRetainNonConfigurationInstance ()
。一部のブログや Android ドキュメントで示唆されているように、これらは後の操作で問題を引き起こす可能性があります。私がしたことは、どの画面 1 または 2 または 3、テキスト ビュー ラベル、すべてのプリミティブ データ型などの必要なすべての情報をonSaveInstanceState
バンドルに保存し、それらを復元することだけです。onRestoreInstanceState
. また、カスタム検索結果のオブジェクト配列をファイルに書き込み、onSaveInstanceState と onRestoreInstanceStates の間で取得して削除しています。私の検索結果には何百ものオブジェクトがあり、大量のプリミティブ データ型リストを保存しているため、ユーザーがデバイスをすばやく回転させると、ヒープ サイズが急速に増加します。
それに対処する最善の方法は何ですか
1) onSaveInstanceState と onRestoreInstanceStates を永続化すると、画面がしばらく空白になり、ヒープ サイズが増加します。ユーザーが複数回回転したときに、必ずしも保存と復元を実行する必要はありません。
2)必要なすべてのデータを静的な場所に保持します。これは、アクティビティに対してローカルではないため、破壊されません
3) Application クラスを拡張して必要なすべてのデータを保持しますか?