2016-01-20 5 views
1

Базовое приложение для обратного отсчета с текстовым изображением и кнопкой запуска/остановки. Если я закрою приложение во время работы countDownTimer, он продолжит работу до завершения. Проблема в том, что когда я снова открываю приложение, пока он подсчитывает метод onTick(), не обновляйте новый экземпляр TextView. Есть ли способ сделать эту работу?Android CountDownTimer - onTick() не обновляет пользовательский интерфейс после повторного открытия приложения

Если я правильно понимаю, CountDownTimer работает в своем собственном сервисе. Мой код:

public class MainActivity extends AppCompatActivity { 

    TextView display; 
    Button button; 
    MyCountdownTimer myTimer; 
    long starTime = 15 * 1000; 
    long interval = 1000; 
    boolean timerIsStarted = false; 

    private static final String TAG = "LogMainActivity"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myTimer = new MyCountdownTimer(starTime, interval); 
     display = (TextView) findViewById(R.id.textViewID); 
     button = (Button) findViewById(R.id.buttonID); 
    } 


    public void startButtonOnClick(View view) { 
     if(!timerIsStarted){ 
      timerIsStarted = true; 
      myTimer.start(); 
     } else { 
      timerIsStarted = false; 
      display.setText("00"); 
      myTimer.cancel(); 
     } 
    } 

    public class MyCountdownTimer extends CountDownTimer { 

     public MyCountdownTimer(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      Log.d(TAG, String.valueOf(millisUntilFinished)); 
      display.setText(String.valueOf(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished))); 
     } 

     @Override 
     public void onFinish() { 
      timerIsStarted = false; 
      Log.d(TAG, "Finished!"); 
      Toast.makeText(getApplicationContext(), "Finished!", Toast.LENGTH_SHORT).show(); 
      display.setText("Finished!"); 
     } 
    } 
} 
+0

@diogojme положил это в ответ! :) – petey

+0

@petey Я уже сделал – diogojme

ответ

0

Это потому, что вы начинаете свой таймер, когда пользователь нажимает на кнопку. Для этого вам нужно добавить myTimer.start(); в метод onCreate. Но помните, что он создает новый экземпляр CountDown, это начнет отсчет с нуля. Поэтому вам нужно сохранить последний раз, а затем начать с этого времени.