我的应用程序当前在onCreate()
方法中调用方法,以便在创建视图后游戏将启动并运行动画。但是当我翻转屏幕以在纵向和横向之间切换时,再次调用此方法。
我已将调用行移动到onStart()
方法甚至方法类构造函数。
这是被调用的方法:
public void startGame() {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
runGame();
}
}, 500);
}
延迟允许在运行之前构建所有内容,否则它将无法正常工作。
我是否有办法阻止onSizeChanged()
影响此方法的调用?或者有没有办法可以调用此方法,以便它在活动开始时启动(同样,onSizeChanged()
不能影响它,并且在调用之前一切都已初始化。)
感谢您的光临。
答案 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();
}
}