我正在开发一个Android工作室的简单游戏,我正在调用GameOver活动,Game Again按钮构成了Game Activity(刚刚命名为MainActivity)。当主角与其中一个怪物碰撞时调用它。我的问题是,当我尝试按((Activity)getContext()).finish();
完成时,我的应用程序关闭而不是启动新活动。这是启动它的方法:
public void isCharacterDead(){
for (Monster item : monsters) {
if (characters.get(0).deadCollision.contains(item.collision.centerX(), item.collision.centerY())) {
player.stop();
long gameOverDelayEnd = (System.nanoTime()/1000000)+1000;
long gameOverDelayStart = System.nanoTime()/1000000;
while(gameOverDelayStart < gameOverDelayEnd){
gameOverDelayStart = System.nanoTime()/1000000;
}
characters.remove(0);
Intent gameOver = new Intent(getContext(),GameOver.class);
gameOver.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
((Activity)getContext()).finish();
getContext().startActivity(gameOver);
}
}
}
我的GameOver活动是:
public class GameOver extends Activity {
private Button tryAgain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//removing the title from the screen in order to have empty screen
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setContentView(R.layout.activity_game_over);
tryAgain = (Button) findViewById(R.id.tryagain);
tryAgain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent game = new Intent(GameOver.this, MainActivity.class);
GameOver.this.finish();
startActivity(game);
}
});
}
}
现在,如果我不使用((Activity)getContext()).finish();
,它就会启动GameOver活动,当点击Try Again时,我会移动到游戏活动的新实例(MainActivity)。但它通过GameOver中的Try Again按钮降低了每次新启动的性能。我想这是因为在没有完成它的情况下在最后一个游戏上启动新游戏Activity。有什么建议可以避免这种情况吗?作为例外,android监视器内部没有任何内容(我的GPU监视器也被禁用)。
答案 0 :(得分:0)
尝试交换这两行:
((Activity)getContext()).finish();
getContext().startActivity(gameOver);
开始活动时不要忘记break
for
循环
编辑:
在编辑问题后添加完整的代码,现在可以清楚地了解原因 你的问题:
您正在从您创建的主题调用方法upd
,upd
依次调用正在完成活动的方法isCharacterDead
,但不允许任何UI元素访问UI线程以外的线程。
您可以使用runOnUiThread
来修复它:
替换启动活动的行并使用以下内容停止当前行程:
((Activity)getContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
Intent gameOver = new Intent(getContext(),GameOver.class);
gameOver.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(gameOver);
((Activity)getContext()).finish();
}
});