3

私の教育用アプリケーションには、横向きモードと縦向きモードをサポートする 6 ~ 7 個のタブを持つタブ ホストがあります。タブに関連付けられたすべてのアクティビティで、選択用のチェックボックスと評価バー、ボタンなどを使用して、リストビューでいくつかの学生レコードを表示しています.Webサービス呼び出しを介してリモートサーバーからこれらの学生レコードを取得しています. 何らかの理由で、私のアプリは、いくつかのアクション/検索を実行した後、いくつかのボタンを含む 1 つの初期相対レイアウトを表示します。リスト ビューでリスト項目またはボタンをクリックすると、リスト ビューに結果が表示されます。他のレイアウトを表示しています。これは、タブ ホストのすべてのアクティビティに適用されます。

ユーザーが向きを変更した場合、同じ状態または同じ画面を復元する必要があります。つまり、ユーザーが以前にレコードのリストを表示していた場合は、レコードのリストを表示する必要があり、初期の場合は初期のみを表示する必要があります。向きの変更やオーバーライド時に Android の破棄アクティビティを強制的に停止したくありませんpublic Object onRetainNonConfigurationInstance ()。一部のブログや Android ドキュメントで示唆されているように、これらは後の操作で問題を引き起こす可能性があります。私がしたことは、どの画面 1 または 2 または 3、テキスト ビュー ラベル、すべてのプリミティブ データ型などの必要なすべての情報をonSaveInstanceStateバンドルに保存し、それらを復元することだけです。onRestoreInstanceState. また、カスタム検索結果のオブジェクト配列をファイルに書き込み、onSaveInstanceState と onRestoreInstanceStates の間で取得して削除しています。私の検索結果には何百ものオブジェクトがあり、大量のプリミティブ データ型リストを保存しているため、ユーザーがデバイスをすばやく回転させると、ヒープ サイズが急速に増加します。

それに対処する最善の方法は何ですか

1) onSaveInstanceState と onRestoreInstanceStates を永続化すると、画面がしばらく空白になり、ヒープ サイズが増加します。ユーザーが複数回回転したときに、必ずしも保存と復元を実行する必要はありません。

2)必要なすべてのデータを静的な場所に保持します。これは、アクティビティに対してローカルではないため、破壊されません

3) Application クラスを拡張して必要なすべてのデータを保持しますか?

4

2 に答える 2

1

マニフェストから向きを修正することをお勧めします。向きの構成が変更された場合はプログラムを使用して (リスナーを追加できます)、向きが変更されたように見えるため、ビューを調整できます。このようにして、データと不要なメモリ ストレージを保存できます。ビューを動的に整列および再配置することは、あいまいではありません。心配する必要はありません。

  // Add inside manifest.
  android:configChanges="orientation|keyboardHidden"

  // Reposition your views
  @Override
  public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig); 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        align_landscape();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        align_portrait();
    }
}
于 2012-07-20T11:45:40.663 に答える