2016-02-21 3 views
1

У меня уже есть googled, и все темы говорят то же самое решение handler.removeCallbacks(null) или handler.removeCallbacksAndMessages(null). Но никто из них не работал для меня.Я действительно не могу остановить обработчик! Как я могу?

Handler handler; 
Runnable runnable; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    //... 

    handler = new Handler(); 

    runnable = new Runnable() { 
     @Override 
     public void run() { 
      time -= 100; 
      if(time == 0){ 
       Intent i = new Intent(Question.this, WrongAnswer.class); 
       startActivity(i); 
       finish(); 
      } 
      else{ 
       handler.postDelayed(this, 100); 
      } 
     } 
    }; 

    handler.postDelayed(runnable,3000); 

    //... 
} 

А вот случай, когда деятельность выходит до того, как истечет время:

if(myAnswer == correctAnswer) 
{ 
    Intent i = new Intent(this, CorrectAnswer.class); 
    startActivity(i); 
    handler.removeCallbacksAndMessages(null); 
    finish(); 
} 
+0

Используйте handler.removeCallbacks (работоспособный) вместо этого. – Piyush

+0

Я попытался использовать handler.removeCallbacks (runnable), но та же проблема появляется – aleksandar1angelov

+0

Ваш обработчик продолжает работать, даже если вы вызываете финиш в runnable? Разве это не остановит текущую деятельность? –

ответ

0

Вы должны сделать свой работоспособной глобальной перед тем handler.removeCallbacks(runnable) будет работать. Кроме того, вы можете использовать глобальную переменную для проверки, если вы отменили уже (это только для безопасности)

private boolean isCancelled = false; 
private Runnable mRunnable = new Runnable() { 
    @Override 
    public void run() { 
     if (isCancelled) return; 
     time -= 100; 
     if(time == 0){ 
      Intent i = new Intent(Question.this, WrongAnswer.class); 
      startActivity(i); 
      finish(); 
     } 
     else{ 
      handler.postDelayed(this, 100); 
     } 
    } 
}; 

, а затем:

isCancelled = true; 
handler.removeCallbacks(mRunnable); 
+0

Я считаю, что обработчик и runnable уже являются глобальными, потому что я объявил их раньше, чем CreateConate methon. Я делаю что-то неправильно? – aleksandar1angelov

+0

Вы пытались использовать isCancelled boolean? –

+0

yep Я сделал его не работает, вероятно, причина, по которой я закончу(), активность и переменная destroy.i не знаю. – aleksandar1angelov

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