Как отправить сообщение в телеграмм канал в заданное время
Подскажите, как можно отправить сообщение в телеграмм канал в заданное время или по расписанию, чтобы один раз выполнился код и создал план отправки нескольких сообщений?
Ответы (1 шт):
Запускаете таймер и ждёте его окончания. После, отправляете всё что нужно в телеграмм.
Как это сделать?
В Java есть классы Timer и TimerTask из пакета java.util, которые позволяют планировать запуск задания на определённое время в будущем. Вы можете создать поток, выполняющий в фоновом режиме и ожидающий заданное время. Когда время истечёт, задача, связанная с этим потоком, будет запущена. С помощью параметров можно запланировать задачу на повторяющий запуск либо на запуск по определённой дате. Вам не нужно создавать поток с помощью класса Thread, так как таймер упрощает эту задачу.
Классы Timer и TimerTask работают в связке. Класс Timer используется для планирования выполнения задачи. Запланированная к выполнению задача должна быть экземпляром класса TimerTask. Вы сначала создаёте объект класса TimerTask, а затем планируете его запуск с помощью класса Timer.
Класс TimerTask реализует интерфейс Runnable и может быть использован для создания потока выполнения.
В классе TimerTask имеется абстрактный метод run(), который следует переопределить. Метод должен содержать исполняемый код.
Метод cancel() прерывает задание и возвращает значение true, если выполнение задания прервано.
Метод scheduleExecutionTime() возвращает время, на которое последний раз планировался запуск задания.
Как только задача создана, она планируется для выполнения объектом класса Timer.
Методы класса Timer:
void cancel()- прерывает поток таймераint purge()- удаляет прерванные задания из очереди таймераvoid schedule(TimerTask task, long delay)- задание task планируется к выполнению через период в миллисекундах, переданный в параметре delayvoid schedule(TimerTask task, long delay, long period)- заданиеtaskпланируется к выполнению через период в миллисекундах, переданный в параметреdelay. Затем задание повторяется повторно периодически - каждыеperiodмиллисекундvoid schedule(TimerTask task, Date when)- заданиеtaskпланируется на время, указанное в параметре whenvoid schedule(TimerTask task, Date when, long period)- заданиеtaskпланируется на время, указанное в параметре when. Затем задание выполняется повторно периодически - каждыеperiodмиллисекундvoid scheduleAtFixedRate(TimerTask task, long delay, long period)- заданиеtaskпланируется к выполнению через период в миллисекундах, переданный в параметреdelay. Затем задание выполняется повторно периодически - каждыеperiodмиллисекунд. Время каждого повтора задаётся относительно первого запуска.void scheduleAtFixedRate(TimerTask task, Date when, long period)- заданиеtaskпланируется к выполнению на время, указанное в параметреwhen. Задание затем выполняется повторно периодически - каждыеperiodмиллисекунд. Время каждого повтора задаётся относительно первого запуска.
Между методами schedule() и scheduleAtFixedRate() есть небольшая разница, которая заключается в разном поведении, которое зависит от стартовой точки запуска. Так второй метод работает как startTime + iterationNumber * delayTime и помнит время запуска. А обычный метод schedule() помнит последнее время выполнения и работает по формуле lastExecutionTime + delayTime. Для быстрых операций это не сильно отличается, а при ресурсоёмких задачах разница будет заметна, например, при работе сборщика мусора приложение может притормозить и следующая задача может запуститься чуть позже.
Как только объект класса Timer создан, запуск планируется вызовом его метода schedule() и его родственника (см. выше).
П.С. Взято отсюда: источник
Пример реализации таймера:
private Timer mTimer = new Timer();
private MyTimerTask mMyTimerTask = new MyTimerTask();
public void startTimer(){
// 1000 - время в мс, через которое будет запущена задача
mTimer.schedule(mMyTimerTask, 1000);
}
class MyTimerTask extends TimerTask {
@Override
public void run() {
// Вот тут делаем всё что нужно (отправляем данные в телеграмм и т.п.)
}
}