活动仍然在finish()之后继续;

omi*_*301 5 android kill-process android-activity

我有一个测验应用程序,它有一个计时器用于整个游戏活动,你应该在指定的分钟内回答尽可能多的问题.

在指定的分钟结束后,它将带您进入显示您的分数的结果活动.在背面按下时,我创建了一个警告对话框,询问您是否要返回主菜单.如果单击是,则页面应返回主菜单并停止/终止游戏活动.

但是,当我单击"是"时,它将返回主菜单,但当您仍然在应用程序的任何位置时,结果仍将显示我之前的游戏活动.也许我还没有真正完成游戏活动,..这是我的活动中的计时器和背压片段:

new CountDownTimer(seconds, 1000) {
    public void onTick(long millisUntilFinished) {
             timer.setText("Seconds left: " + millisUntilFinished / 1000);
    }   
    public void onFinish() {
             Intent intent = new Intent(GameActivityAddition.this, Score.class);
             intent.putExtra("totalscore", score);
             intent.putExtra("numberquestions", rowId);
             intent.putExtra("d", difficulty);
             db.close();
             startActivity(intent);
    }
}.start();

@Override
public void onBackPressed() {
    AlertDialog.Builder abuilder = new Builder(GameActivityAddition.this);
    abuilder.setMessage("Return to Main Menu?");
    abuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            Intent main = new Intent(GameActivityAddition.this, Main.class);
            startActivity(main);
            finish();           
        }
    });
    abuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();            
        }
    });
    AlertDialog alert = abuilder.create();
    alert.show();
}
Run Code Online (Sandbox Code Playgroud)

AjO*_*ire 2

不保证 finish() 会立即关闭您当前的 Activity(这取决于 Android。)


为了解决你的问题试试这个,


保存对计时器的引用(当用户离开当前活动时,您将使用它来取消计时器),

CountDownTimer resultTimer = new CountDownTimer(seconds, 1000) {
    public void onTick(long millisUntilFinished) {
             timer.setText("Seconds left: " + millisUntilFinished / 1000);
    }   
    public void onFinish() {
             Intent intent = new Intent(GameActivityAddition.this, Score.class);
             intent.putExtra("totalscore", score);
             intent.putExtra("numberquestions", rowId);
             intent.putExtra("d", difficulty);
             db.close();
             startActivity(intent);
    }
}.start();
Run Code Online (Sandbox Code Playgroud)


并在 onBackPressed() 中 - 取消 setPositiveButton 回调中的计时器,


@Override
public void onBackPressed() {
    AlertDialog.Builder abuilder = new Builder(GameActivityAddition.this);
    abuilder.setMessage("Return to Main Menu?");
    abuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            resultTimer.cancel(); //Stop the timer
            resultTimer = null;
            Intent main = new Intent(GameActivityAddition.this, Main.class);
            startActivity(main);
            finish();           
        }
    });
    abuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();            
        }
    });
    AlertDialog alert = abuilder.create();
    alert.show();
}
Run Code Online (Sandbox Code Playgroud)