0

私のアプリは現在、メソッド内でonCreate()メソッドを呼び出して、ビューが作成されるとゲームが開始され、アニメーションが実行されるようにします。ただし、画面を反転して縦向きと横向きを切り替えると、このメソッドが再度呼び出されます。

呼び出し行をonStart()メソッドとメソッド クラス コンストラクターの両方に移動しました。

これが呼び出されているメソッドです。

public void startGame() {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        public void run() {
            runGame();
        }
    }, 500);
}

実行前にすべてを構築できるようにするための遅延があります。それ以外の場合は機能しません。

onSizeChanged()呼び出されているこのメソッドへの影響をやめる方法はありますか? または、このメソッドを呼び出して、アクティビティが開始されたときに開始されるようにする方法はありonSizeChanged()ますか?

ご覧いただきありがとうございます。

4

3 に答える 3

1

最も簡単な方法は、次を追加することです。

android:configChanges="orientation|screenSize"

これは、自分で処理することをシステムに伝えます。ただし、お勧めしません。

注: この属性の使用は避け、最後の手段としてのみ使用してください。構成の変更による再起動を適切に処理する方法の詳細については、ランタイムの変更の処理を参照してください。

または、savedInstanceState を確認できます。null でない場合は、ユーザーが向きを変更したことを意味します (または、アプリが構成変更から戻ってきています)。多分何かがこのようなものです:

if(savedInstanceState == null)
    startGame();
else
    //handle a configuration change if necessary

向きが変わったときにアプリケーションをリロードしないを参照してください

編集 :

if(savedInstanceState == null) {
    startGame();
} else {
    //handle a configuration change if necessary
    int yourVar = savedInstanceState.getInt("something");
}
于 2013-05-01T12:33:55.540 に答える
0

これをマニフェストに追加します。

android:configChanges="screenSize"
于 2013-05-01T12:34:08.840 に答える
0

ハンドラーの代わりに静的スレッド変数を使用できますか?

例えば

  private static Thread gameThread = new Thread(new Runnable(){
        public void run()
        {
              //if necessary: Thread.sleep(500);
              runGame();
        }
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
        //rest of oncreate code here
        if(gameThread.isAlive() == false)
        {
              gameThread.start();
        }
  }
于 2013-05-01T12:35:23.587 に答える