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