В основном я застреваю, потому что «улучшения» в батарее добавлены в Android 6.0+. Мое приложение поддерживает API из 11+Правильный способ запуска IntentService каждые x минут в Android, доза включена
Сценарий
Вот мой сценарий: мое приложение извлекает данные из веб-службы сервера 3 партии. Поскольку это не мой сервер, я не контролирую, когда данные добавляются или удаляются. Доступность данных различна. Я хочу иметь возможность запускать IntentService для извлечения данных, например каждые 30/60 минут в течение следующих 6 часов. Таким образом, у меня могут быть данные в моем приложении, охватывающие случай, когда данные становятся недоступными с сервера. Конечно, это нужно сделать, даже если мое приложение закрыто.
Вы можете сказать, что это не дружит с батареей, но это вариант для опытных пользователей иметь под рукой.
То, что я сделал до сих пор
Я боролся много с установкой Alarms
. Хотя установка повторяющегося сигнала тревоги казалась самым простым и удобным способом его работы, он оказался надежно работать только до версии android 5.0.
Начиная с введения Doze
, согласно документам, тревоги откладываются до maintenance window
, и поскольку эти окна приходят в 1-2-4 часа и так далее, это не подходит для моих нужд.
Я отказался от использования set repeating
и попытался использовать один раз Alarm
, который переносится в течение IntentService
. От тестирования setExact
, похоже, не работал хорошо, но затем попытался setExactAndAllowWhileIdle
, который действительно срабатывает в нужный момент, но если в режиме Doze
он не имеет доступа к сети, что делает его бесполезным.
Несмотря на это, я не уверен, что происходит, когда сигнал с setRepeating
или setExact
задерживается, но устройство пробуждать перед тем окно следующего техобслуживания ...
В основном теперь я застрял, с механизмом, который не работать, и я не знаю, что еще выбрать, учитывая версии Android, поддерживаемые приложением и требованиями.
LE: на самом деле я не знаю о хорошем способе задания фоновых заданий на Android, даже если исключить Doze. Я имею в виду, что у нас есть JobScheduler
, который кажется приятным делом ... но эй, он доступен только на Android 21 и не поддерживается в обратном порядке ... Я имею в виду действительно, имея простую вещь, и я уже жду через несколько дней.
Спасибо, 'setAlarmClock', кажется, единственный реальный вариант, но на самом деле это не выход. – Alin