Как сделать Timer.schedule () для конкретных часов и минут? - PullRequest
0 голосов
/ 22 июля 2011

Я пытался заставить метод schedule() ждать до определенного часа и минуты. приходит и начинает выполнять задачу, но она не работает потому что метод schedule() не занимает часы и минуты в качестве аргумента, что является заменой для этого метода? я должен составить график на несколько часов затем, когда наступит час, программа проверит минуты? тогда, если оба верны он начнет выполняться или как?

P.S для облегчения понимания, как сделать что-то похожее на это :

расписание (новый TimerClass (), желаемые часы , желаемые минуты )?

Ответы [ 2 ]

0 голосов
/ 22 июля 2011

Если вы хотите запланировать на определенное время (а не на задержку от текущего времени), вот несколько вариантов:

  • Используйте Кварц , если выделать это достаточно, чтобы оправдать дополнительную библиотеку.Кварц позволяет легко задавать время часов и поддерживает планирование повторяющихся событий.
  • В противном случае, во время планирования рассчитайте разницу между текущим временем и желаемым временем.(Используйте класс Calendar для создания часов, преобразования в даты и getMillis ().) Введите разницу в Timer или ScheduledThreadPoolExecutor.
0 голосов
/ 22 июля 2011

Вам не нужно такое жёсткое кодирование. Тестируйте час, затем минуты. Просто запланируйте задачу, как показано ниже. Задание, приведенное ниже, будет выполнено через один час и будет повторяться каждые 30000 мсек. Если вам нужно выполнить только один раз, отмените время после первого выполнения, например, используя t.cancel (), а также конвертируйте час + минуту в мс, чтобы установить запланированное время.

 TimerTask scanTask;
final Handler handler = new Handler();
Timer t = new Timer();


scanTask = new TimerTask() {
        public void run() {
                handler.post(new Runnable() {
                        public void run() {
                         //do your task here    

                    }
               });
        }};

t.schedule(scanTask, 1*60*60*1000, 30000); 
...