Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java onSizeChanged()调用onCreate()和onStart()安卓_Java_Android - Fatal编程技术网

Java onSizeChanged()调用onCreate()和onStart()安卓

Java onSizeChanged()调用onCreate()和onStart()安卓,java,android,Java,Android,我的应用程序当前调用onCreate()方法中的一个方法,以便在创建视图后启动游戏并运行动画。但是,当我翻转屏幕在纵向和横向之间切换时,会再次调用此方法 我已经将调用行移到了onStart()方法,甚至是方法类构造函数 这是正在调用的方法: public void startGame() { Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run(

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

我已经将调用行移到了
onStart()
方法,甚至是方法类构造函数

这是正在调用的方法:

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

        public void run() {
            runGame();
        }
    }, 500);
}
允许在运行之前构建所有内容是有延迟的,否则它将无法工作

有没有办法阻止
onSizeChanged()
影响调用此方法?或者,是否有一种方法可以调用此方法,使其在活动启动时启动(同样,使
onSizeChanged()
不能影响它,并且在调用之前初始化所有内容)


感谢您的关注。

最简单的方法是添加:

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

将此添加到您的清单中:

android:configChanges="screenSize"

是否可以使用静态线程变量而不是处理程序

e、 g


这不是个好主意。当您再次初始化
Runnable
对象时,它将隐式地保存对父类的引用(在本例中,是一个
Activity
),并且只要线程继续运行,
Activity
就会泄漏。谢谢:)有办法保存另一个类的状态吗(由View类使用,它创建一个序列,并在构造函数中向序列添加3个整数。因此,当我更改方向时,它会再次添加3个整数,这是我不想要的)@Waddas我不知道你想做什么,但你可以使用onSaveInstanceState。请看对不起,我不清楚。我有一个类没有实现View,有没有办法保存和恢复它的状态,这样改变方向就不会影响它?据我所知,状态应该自动保存。无论如何,你可以覆盖onSaveInstanceState()并添加类似以下内容savedInstanceState.putin(“某物”,value);然后在一次创建中使用savedInstanceState.getInt(“某物”)重新设置它;请查看我的更新答案,并查看
  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();
        }
  }