为什么我的应用程序在从自定义视图启动Activity后关闭?
我正在Android Studio中进行一个简单的游戏,并且我正在调用GameOver活动,并且再次尝试按钮形式的游戏活动(它只是名为MainActivity)。当主角与其中一个怪物发生碰撞时被调用。我的问题是,当我尝试以((Activity)getContext()).finish();
完成时,我的应用程序关闭,而不是开始新的活动。这是启动它的方法:为什么我的应用程序在从自定义视图启动Activity后关闭?
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活动,当再次尝试点击我移动到游戏活动的新实例(MainActivity)。但它会通过GameOver中的“再试一次”按钮来降低每次新开始时的性能。我想这是因为在没有完成最后一场比赛的情况下开始新的比赛活动。有关如何避免这种情况的任何建议?作为例外,android监视器内没有任何内容(我的GPU监视器也被禁用)。
尝试交换这两行:
((Activity)getContext()).finish();
getContext().startActivity(gameOver);
当你启动活动
编辑不要忘记break
的for
循环:
编辑您的问题将您的完整代码后现在明确你的问题的原因 :
你正在调用th e方法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();
}
});
我交换了它们,但它仍然是一样的 - 应用程序自动关闭,没有任何消息或任何东西。如果我没有完成从GameOver每次新开始的活动,则性能会在仿真器上破坏,在真实设备上它甚至会在第四次使用时关闭应用程序。如果更清楚,MainActivity启动GameScreen视图,在该视图中我将该问题显示为GameOver活动。 –
如果它的事项我的清单看起来像这样: ' 意图滤波器>
您可以发布logcat的,以便我们能够帮助您更好地 – ammcom
为什么要使用Intent.FLAG_ACTIVITY_NEW_TASK并在写你的代码? getContext()方法如何工作? – ammcom
isCharacterDead()位于自定义视图内。在每个精灵位置的帧更新后调用它。 –