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 回答