Make countDownTimer выполняется сразу же, а затем каждые x секунд после - PullRequest
0 голосов
/ 10 января 2020

У меня есть countDownTimer, который выполняет определенный раздел кодов каждые 10 секунд при нажатии кнопки. Но он выполняет коды только через 10 секунд после нажатия кнопки. Как заставить его исполниться сразу, а затем через секунду?

CountDownTimer countDown;

public void onButtonClick (View v) throws IOException, InterruptedException {

countDown = new CountDownTimer(10000,10000)
        {
            @Override
            public void onTick(long millisUntilFinished) {

            }

            @Override
            public void onFinish() {
                start();
                //codes
        }.start();

    }
}

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Если вы хотите выполнять код каждые 10 секунд, я предлагаю сделать что-то еще.

Execute startRepeatingTask (); когда кнопка нажата.

private int interval = 10000; //every 10 seconds
private Handler handler;

Runnable codeExecuter = new Runnable() {
    @Override
    public void run() {
        try {
           //run your code
        } finally {
            handler.postDelayed(codeExecuter, interval);
        }
    }
};

void startRepeatingTask() {
    codeExecuter.run();
}

void stopRepeatingTask() {
    handler.removeCallbacks(codeExecuter);
}
0 голосов
/ 10 января 2020

https://developer.android.com/reference/android/os/CountDownTimer

CountDownTimer (long millisInFuture, countDownInterval)

'millisInfutre' означает миллисекунды после запуска () до вызова onFini sh ()

Установить 'millisInfutre' больше. И я думаю, что нет необходимости совершать первый вызов как часть CountDownTimer. Просто позвоните прямо.

someYourTask(?);
new CountDownTimer(Long.MAX_VALUE, 10000) {
    @Override
    public void onTick(long l) {
        someYourTask(?);
    }
    @Override
    public void onFinish() {
        Log.d("SOME_TAG", "FINISH");
    }
}.start();


? someYourTask(?) {}
...