2014-06-26 2 views
0

Я пишу некоторый таймер. и я хочу отобразить его в textview после нажатия кнопки «Пуск». Что я сделал. Каждый раз, когда яИспользование Thread несколько раз для обновления UI

timer = new Thread(new Runnable() { 
      @Override 
      public void run() { 

       while (!stopedButton) { 

        time = ""; 
        if (timerMinutes >= 60) { 
         timerMinutes = 0; 
         timerHours++; 
        } 

        if (timerHours < 10) 
         time = "0" + String.valueOf(timerHours) + ":"; 
        else 
         time = String.valueOf(timerHours) + ":"; 
        if (timerMinutes < 10) 
         time += "0" + String.valueOf(timerMinutes); 
        else 
         time += String.valueOf(timerMinutes); 
        runOnUiThread(new Runnable() { 
         public void run() { 
          if (!stopedButton) { 
           mTimeFromStartValue.setText(time); 
           timerMinutes++; 
          } else { 
           timerMinutes = 0; 
           timerHours = 0; 
          } 
         } 

        }); 
        Log.e(TAG, ""+timerHours); 
        Log.e(TAG, ""+timerMinutes); 
        Log.e(TAG, time); 
        try { 
         Thread.sleep(1 * 1000); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 

      } 
     }); 

так хорошо работает, но каждый раз после остановки, а затем начать и после того, как делать это много раз мой таймер начинает работать быстро. Я стараюсь избегать такой ситуации, и я думал, что мне не нужно создавать новый таймер каждый раз. Но мне нужно иметь рабочий таймер после остановки.

Я написал код так:

if(timer.isAlive()){ 
     timer.resume(); 
    }else{ 
     timer.start(); 
    } 

Но я получил это исключение: java.lang.IllegalThreadStateException: Thread already started

так, как решить эту проблему?

+0

Рекомендуемый способ для такого рода поведение в андроида является TimerTask –

ответ

0

Чтобы создать новую тему, Вам необходимо создать новый экземпляр Thread. Также вам нужно использовать метод interrupt() класса Thread.

Используйте этот код, чтобы закончить тему:

@Override 
public void run() { 

    while (true) { 

     // Your code here 

     if(isInterrupted()){ 
      return; 
     } 
    } 

} 

Используйте этот код, когда кнопка остановки была нажата:

timer.interrupt(); 
timer.join(); 
Смежные вопросы