Наконец, после некоторых проб и ошибок мне удалось заставить его работать так, как я хотел.
Но теперь я хотел бы вашего совета, чтобы сделать код более читабельным и простым, кажется, я сделал много ненужного кода, чтобы заархивировать то, что я хотел.
Что это в основном делает, так это то, что если вы включите серверное приложение в то время, когда должна выполняться задача по расписанию, она запустит задачу и позволит ей работать в течение времени, оставшегося с того момента, когда она должна была начаться, иначе она будет запланирована для запуска в час он должен работать.
Таким образом, если время расписания 13:00:00 и должно работать в течение 120 минут, а вы запускаете приложение в 13:30, оно будет работать в течение 90 минут. Если вы запустите его после этого времени, он будет обычно запланирован на следующий день в 13:00:00.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
long start_time = calendar.getTimeInMillis() - System.currentTimeMillis();
if (start_time < 0)
{
long minutes = (start_time*-1) / (60 * 1000);
if (minutes > 0 && minutes < 120)
{
runTimeLeft = 120 - minutes;
ThreadPoolManager.getInstance().schedule(new Runnable()
{
public void run()
{
myTask();
}
}, 0);
}
else
runTimeLeft = 0;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour+24);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
start_time = calendar.getTimeInMillis() - System.currentTimeMillis();
}
ThreadPoolManager.getInstance().scheduleAtFixedRate(new Runnable()
{
public void run()
{
myTask();
}
}, start_time, 24 * 60 * 60 * 1000);
Итак, мой вопрос здесь заключается в том, что я могу улучшить в приведенном выше коде?