Как лучше организовать заведомо долгий отложенный поток?
Насколько сильно мучается телефон выполняя каждый из этих потоков?
А если для случая #2 секунды сменить на милисекунды? Наносекунды?
p.s. это выполняется в ForegroundService
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.schedule(new Runnable() {
// JOB
}, 24, TimeUnit.HOURS);
ИЛИ
2. Каждую секунду сравнивать текущее VS целевое время (изначально между ними разница в 24 часа)ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(new Runnable() {
if (текущее время >= выбранного времени){
//JOB
}
}, 0, 1, TimeUnit.SECONDS);
Для вашей цели следует использовать инструменты, которые предоставляет Android для запуска отложенных задач, например AlarmManager, JobScheduler или библиотеку WorkManager. Дело в том, что ForegroundService вообще не даст телефону уснуть в течении всего этого времени, что вызовет заметный расход батареи вашим приложением на фоне других. ScheduledExecutorService это чисто класс Java и больше предназначен для бекенд приложений, которые выполняются постоянно. Android приложения не должны выполняться постоянно если нет для этого необходимости (а ее нет, если нужно просто ждать). Поэтому лучше предоставить запуск запланированной задачи Android.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости