onSizeChanged()调用onCreate()和onStart()? - Android

时间:2013-05-01 12:07:52

标签: java android

我的应用程序当前在onCreate()方法中调用方法,以便在创建视图后游戏将启动并运行动画。但是当我翻转屏幕以在纵向和横向之间切换时,再次调用此方法。

我已将调用行移动到onStart()方法甚至方法类构造函数。

这是被调用的方法:

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

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

延迟允许在运行之前构建所有内容,否则它将无法正常工作。

我是否有办法阻止onSizeChanged()影响此方法的调用?或者有没有办法可以调用此方法,以便它在活动开始时启动(同样,onSizeChanged()不能影响它,并且在调用之前一切都已初始化。)

感谢您的光临。

3 个答案:

答案 0 :(得分:1)

最简单的方法是添加:

android:configChanges="orientation|screenSize"

告诉系统你自己会照顾它们。 However, it's not recommended.

  

注意:应避免使用此属性,并仅将其用作最后的手段。有关如何通过配置更改正确处理重新启动的更多信息,请阅读处理运行时更改。

或者您可以检查savedInstanceState。如果它不为null,则表示用户更改方向(或者应用程序从配置更改中返回)。也许是这样的:

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

请参阅Don't reload application when orientation changes

编辑:

if(savedInstanceState == null) {
    startGame();
} else {
    //handle a configuration change if necessary
    int yourVar = savedInstanceState.getInt("something");
}

答案 1 :(得分:0)

将此添加到您的清单中:

android:configChanges="screenSize"

答案 2 :(得分:0)

你能使用静态线程变量而不是处理程序吗?

e.g。

  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();
        }
  }