Активность продолжается после финиша ();

У меня есть приложение для викторины, в котором есть таймер для всей игры, где вы должны ответить на столько вопросов, сколько вы можете в течение заданных минут.

После того, как назначенные минуты будут завершены, вы попадете на результаты, которые показывают ваш результат. На обратном нажатии я создал диалоговое окно с предупреждением, в котором спрашивается, хотите ли вы вернуться в главное меню. Если нажать «Да», страница должна вернуться в главное меню и остановить / убить игру.

Однако, когда я нажимаю «да», он вернется в главное меню, но пока вы все еще находитесь в приложении, результаты все равно будут отображаться из предыдущей игровой активности, которую я имел. Возможно, я действительно не закончил игровой процесс, .. Вот таймер и задний снимок от моей активности:

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(); } 

Нет гарантии, что функция finish () немедленно закроет вашу текущую деятельность (это до 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(); 

И в 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(); } 

Свойством CountDownTimer является то, что даже вы закончили действие, которое оно продолжает считать. Если вы хотите остановить это, поместите countTimerVar.cancel() когда вы finish() и в pressBackButton .

Завершение родительской активности из дочерней активности можно реализовать, начав дочернюю активность с помощью startActivityForResult и внедряя onActivityResult для обработки возвращаемого результата дочерней активностью. Пример: из ParentActivity запустите ChildActivity для получения результата с помощью startActivityForResult() . Затем задайте результат, который также проинформирует ParentActivity. Вызов завершения () в ChildActivity. Когда ParentActivity получает этот результат из ChildActivity, ParentActivity также вызывает финиш (). И там вы можете начать еще одно мероприятие.

Для кода см.: http://www.androidcompetencycenter.com/2009/03/tutorial-how-to-start-a-new-activity/