2

Activityユーザーのデバイスが回転したときに破棄されて再作成されることについて少し混乱しています。

私は読んでいて、そうすることの理論的根拠を理解しています(基本的に、ローテーション/言語/その他の変更時に何も「見逃し」ていないことを開発者に「強制」します)

ベスト プラクティスがそのように見られる場合は喜んで尊重しますが、次のような疑問が生じます。

ゲーム/アプリの状態を「記憶」して、画面が回転したときに、ユーザーが見ていたものを再生成するための何かを取得するにはどうすればよいですか?

私が見る限り、絶対にすべてが破棄され、基本クラスのコンストラクターが実行され、その中のすべての変数Activityが「null」になっています。

「savedInstanceState」(Bundleクラス)はそのデータを収集する場所だと思いますが、その周りの読み取りは、アプリがリソース不足で閉じられた場合にのみ使用されるようです(および他のいくつかの非常にまれなケース)

私は、savedInstanceState の目的を誤解または誤解していますか? Activityローテーション時に何も見逃さないように注意している場合、ベスト プラクティスを放棄する (を破棄する) のは賢明ですか? アドバイスをよろしくお願いします。

この質問はゲーム プログラミングに適用されることに注意してください (レイアウト XML は使用していません)。

4

2 に答える 2

2

アクティビティを再作成する必要がありますか? ローテーションでやりたい仕事はありますか?savedInstanceState は、アクティビティの再生成に渡されるデータを保存する場所ですが、XML レイアウトを使用していないため、マニフェストのアクティビティに android:configChanges="orientation" を追加することを検討してください。これにより、回転の変更中に何が起こるかを手動で制御できます。

元のコメントに加えて、表示されるキーボードの設定変更も上書きします。

android:configChanges="orientation|keyboardHidden"

ローテーションの変更でやりたい作業がある場合は、オーバーライドonConfigChangeしてそこで必要なことを行うことができます。

構成の変更を常にオーバーライドする必要がある場合があるとは言い難いですが、サイズや向きに固有のリソース フォルダーに依存しておらず、多くの作業が必要な場合は、それを行うことがよくあります。再作成する時間。

于 2013-10-17T15:08:06.007 に答える
0

アクティビティ構成の変更中にデータを保存するためのベスト プラクティスは他にもあります。

1. Developer Doc Handling Runtime Changes
2. Alex Lockwood : Handling Configuration Changes with Fragments、これは、設定の変更とデータの保存に関するすべての質問に答えます。

Impt: データを格納するフラグメント ファイル。setRetainInstace(true)アクティビティ構成の変更中にデータを保存して取得するに は、設定する必要があります。

@Override 
   public void onCreate(Bundle savedInstanceState) {  
          super.onCreate(savedInstanceState);        
          // retain this fragment
          setRetainInstance(true);    
    }
于 2015-04-03T04:00:19.640 に答える