Установить таймер для выполнения задачи несколько раз - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть требование, где мне нужно создать задачу таймера, которая будет выполнять функцию через каждые 10 секунд. Сброс Button, по щелчку сброса Button Я хочу сбросить время с 10 до 30 секунд. Теперь через 30 секунд после выполнения этой функции мне нужно снова сбросить таймер на 10 секунд. Я пытался использовать Handler, TimerTask и CountDownTimer, но не смог выполнить требование. Может кто-нибудь предложить мне лучший способ решения этой проблемы

// OnCreate of Activity
if (timerInstance == null) {
            timerInstance = Timer()
            timerInstance?.schedule(createTimerTask(), 10000L, 10000L)
}

private fun createTimerTask(): TimerTask {
        return object : TimerTask() {
            override fun run() {
                Log.d("TimerTask", "Executed")
                //presenter?.onCountdownTimerFinished(adapter.activeCallList, adapter.previousPosition)
            }
        }
}

//On Reset Button Click
timerInstance?.cancel()
timerInstance = Timer()
timerInstance?.schedule(createTimerTask(), 30000L, 30000L)

1 Ответ

1 голос
/ 23 апреля 2019

Когда ваша кнопка нажата, вы можете отменить отправленный TimerTask и перенести его с задержкой 30 секунд и периодом 10 секунд? https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html#scheduleAtFixedRate-java.util.TimerTask-long-long-

  1. Отмените первую отправленную задачу, вызвав на нее .cancel.
  2. используйте 30000L, 10000L в качестве задержки и периода по расписанию в кнопке

Пример кода:

package so20190423;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerTest {

    public static void main(String[] args) {
        System.out.println(new Date());
        Timer timer = new Timer();
        TimerTask task = newTask();
        timer.scheduleAtFixedRate(task, 10000L, 10000L);
        task.cancel();
        timer.scheduleAtFixedRate( newTask(), 30000L, 10000L);
    }

    protected static TimerTask newTask() {
        return new TimerTask() {

            @Override
            public void run() {
                System.out.println("YO");
                System.out.println(new Date());
            }
        };
    }

}

НТН!

...