2015-12-28 6 views
0

В настоящее время я пытаюсь диагностировать ошибку, когда пользователь хочет вернуться из игровой активности, используя кнопку «Назад», она закрывает окно, но, похоже, фактически не закрывает активность , Причина, по которой я думаю, что деятельность не закрывается, связана с тем, что, когда начинается новая игровая активность, действие, похоже, вызывает onFinish из CountDownTimer и закрывается, как будто время заканчивается, когда таймер в игре показывает, что еще осталось время в новом игра. По существу, я думаю, что моя старая деятельность закрывает мою новую деятельность, даже после того, как активность больше не отображается и должна быть закрыта на основе моего метода onBackPressed().Закрытие операции неожиданно после нажатия кнопки возврата

Вот мой код:

public class Game extends Activity { 
ImageButton position0; 
ImageButton position1; 
ImageButton position2; 
ImageButton position3; 
Button colorPosition; 
RelativeLayout background; 
Random rand = new Random(); 
int[] position = {0,1,2,3}; 
int score = 0; 
int streak = 1; 
int multi = 1; 
int currentColor; 
SharedPreferences gamePrefs; 
boolean countDisable = true; 
public static final String GAME_PREFS = "ColorMatchFile"; 
TextView scoreText; 
TextView multiplierText; 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game); 
    gamePrefs = getSharedPreferences(GAME_PREFS, 0); 
    scoreText = (TextView) findViewById(R.id.score); 
    multiplierText= (TextView) findViewById(R.id.multiplier); 
    background = (RelativeLayout) findViewById(R.id.background); 
    StartCount start_count = new StartCount(5000, 1000); 
    start_count.start(); 
    colorPosition = (Button)findViewById(R.id.colorPosition); 
    position0 = (ImageButton)findViewById(R.id.position0); 
    position1 = (ImageButton)findViewById(R.id.position1); 
    position2 = (ImageButton)findViewById(R.id.position2); 
    position3 = (ImageButton)findViewById(R.id.position3); 
    if(savedInstanceState != null){ 
     int exScore = savedInstanceState.getInt("score"); 
     scoreText.setText("Score: "+ exScore); 
    } 

@Override 
public void onBackPressed() { 
    setHighScore(); 
    finish(); 
    Intent intent = new Intent(getApplicationContext(), score_screen.class); 
    startActivity(intent); 
    super.onBackPressed(); 
} 

public class MyCount extends CountDownTimer{ 
    public MyCount(long millisInFuture,long countDownInterval){ 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onFinish() { 
     final TextView time = (TextView) findViewById(R.id.time); 
     time.setText("Times Up!"); 
     Thread thread = new Thread(); 
     try { 
      thread.sleep(250); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     setHighScore(); 
     finish(); 
     Intent intent = new Intent(getApplicationContext(), score_screen.class); 
     startActivity(intent); 
    } 

    @Override 
    public void onTick(long millisUntilFinished){ 
     final TextView time = (TextView) findViewById(R.id.time); 
     time.setText("Left: " + millisUntilFinished/1000); 
    } 
} 

    public class StartCount extends CountDownTimer{ 
    public StartCount(long millisInFuture,long countDownInterval){ 
     super(millisInFuture, countDownInterval); 
    } 

    @Override 
    public void onFinish() { 
     final TextView time = (TextView) findViewById(R.id.time); 
     time.setText("Begin!"); 
     MyCount counter = new MyCount(30000, 1000); 
     currentColor = rand.nextInt(4); 
     setCurrentColor(currentColor); 
     countDisable = false; 
     counter.start(); 
    } 

    @Override 
    public void onTick(long millisUntilFinished){ 
     final TextView time = (TextView) findViewById(R.id.time); 
     time.setText("Start In: " + millisUntilFinished/1000); 
     showCurrentPosition(); 
    } 
} 
+0

Пожалуйста, размещайте больше кода. Где используется MyCount? Что такое gamecontext? – Noli

+0

В LogCat появилась ошибка? – Raptor

+0

Нет, это странно. LogCat не видит в нем ошибку, потому что я нажимаю кнопку «Назад», а не закрываю действие с помощью MyCount.onFinish(). Когда используется onFinish() (время заканчивается полностью), все действует нормально. Проблема заключается в том, когда пользователь закрывает среднюю игру. –

ответ

0

Ну проблема была я не оборачиваясь счетчик для MyCount прочь. Вот как я это решил:

@Override 
public void onBackPressed() { 
    setHighScore(); 
    counter.cancel(); 
    this.finish(); 
    Intent intent = new Intent(getApplicationContext(), score_screen.class); 
    startActivity(intent); 
} 

Примечание. Мне пришлось использовать counter.cancel() и сделать счетчик глобальной переменной.

Смежные вопросы