Как создать бесконечный цикл - PullRequest
5 голосов
/ 26 ноября 2011

Хорошо, мне нужно создать бесконечный цикл при обратном отсчете.Мой код:

public void countdown() {
    if (x != null) {
        x.cancel();
    }

    x = new CountDownTimer(20000, 1000) {
        public void onTick(long millisUntilFinished) {
        }

        public void onFinish() {
            showNotification();
        }
    };
    x.start();
}

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

Ответы [ 7 ]

12 голосов
/ 26 ноября 2011

Надеюсь, это поможет вам.

public void countdown(){
    if (x != null) {
        x.cancel();
    }
    x = new CountDownTimer(20000, 1000) {
       public void onTick(long millisUntilFinished) {
        }
       public void onFinish() {
           showNotification();
            x.start();
        }
    };
 }
5 голосов
/ 26 ноября 2011

это перезапустить ваш таймер, когда он закончил :) как это:

   x = new CountDownTimer(20000, 1000) {
            public void onTick(long millisUntilFinished) {
            }

            public void onFinish() {
                showNotification();
                start();// here, when your CountDownTimer has finished , we start it again :)
            }
        };
        x.start();
4 голосов
/ 13 июня 2017

Для записи CountDownTimer ( long millisInFuture, long countDownInterval)

  // A not so infinite but close to infinte interval for each second
  CountDownTimer cdt=new CountDownTimer(Long.MAX_VALUE, 1000) { .... }

Где Long.MAX_VALUE = 9223372036854775807 миллисекунд или около 292 миллионов лет (секунд больше или меньше)

Это не бесконечно, но невероятно долго.

3 голосов
/ 30 марта 2018

Простой способ создания бесконечного цикла:

Каждый метод вызова secod

new CountDownTimer(1000, 1000) 
   {
        public void onTick(long l) {}
        public void onFinish() 
        {
          //Code hear
          start();
        }
    }.start();
2 голосов
/ 26 ноября 2011

Почему бы просто не использовать обычный таймер? Он будет повторяться через указанный интервал до тех пор, пока вы не вызовете метод cancel (), например:

public void countdown() { 
    if (x != null) {
        x.cancel();
    }

    x = new Timer("timerName");
    x.schedule(_timerTask, 0, 20000);
}

private static final TimerTask _timerTask = new TimerTask() {
    @Override
    public void run() {
        showNotification();
    }
};
1 голос
/ 09 июля 2013

чтобы ваш таймер работал, просто поставьте

<countdowntime>.start(); 

в блоке onfinish

1 голос
/ 26 ноября 2011

Вы можете просто использовать цикл while:while (true) {<br /> // do stuff<br /> }Когда он выполнит «все», он начнется снова, бесконечно!

...