从自定义View启动Activity后,为什么我的应用程序关闭?

时间:2017-09-23 13:31:10

标签: java android android-activity view

我正在开发一个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监视器也被禁用)。

1 个答案:

答案 0 :(得分:0)

尝试交换这两行:

((Activity)getContext()).finish();
getContext().startActivity(gameOver);

开始活动时不要忘记break for循环

编辑:

在编辑问题后添加完整的代码,现在可以清楚地了解原因 你的问题:

您正在从您创建的主题调用方法updupd依次调用正在完成活动的方法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();
        }
 });