Я хочу запускать некоторую задачу (например, получать страницу новостей веб-сайта) периодически (один раз в неделю/день), даже если мое приложение закрыто. Является ли это возможным?
Периодичность выполнения задачи (один раз в день/раз в неделю)
Ответ 1
Да, вам нужно посмотреть AlarmManager, чтобы настроить повторный "Тревога". Это лучше для аккумулятора на устройстве, так как в отличие от обслуживания он не работает постоянно в фоновом режиме. Тревога запускает широковещательный приемник, который будет выполнять ваш пользовательский код.
В качестве окончательной заметки - есть значения перечислимых значений для времени тревоги, включая ежедневные, половинные сутки и многое другое, хотя вы можете просто установить фактическое значение.
Хороший пример можно найти в следующем сообщении SO:
Пример диспетчера аварийных сигналов
Update
Новые функции были добавлены в Android. Если вы читаете это, я бы посоветовал вам теперь взглянуть на GcmNetworkManager. Это оптимизирует время работы от батареи и работает до леденца. Для Lollipop вы можете использовать JobScheduler. Я бы посоветовал использовать эти классы над AlarmManager.
Ответ 2
Я думаю, что лучше всего подходит GcmNetworkManager. В основном у него есть все, что вам нужно, от AlarmManager плюс настойчивость, поэтому после перезагрузки можно продолжить выполнение.
Пример:
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(5L)
.build();
mGcmNetworkManager.schedule(task);
Ответ 3
В качестве альтернативы я сравниваю текущую неделю:
Calendar cal = Calendar.getInstance();
int currentWeekOfYear = cal.get(Calendar.WEEK_OF_YEAR);
SharedPreferences sharedPreferences= this.getSharedPreferences("appInfo", 0);
int weekOfYear = sharedPreferences.getInt("weekOfYear", 0);
if(weekOfYear != currentWeekOfYear){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("weekOfYear", currentWeekOfYear);
editor.commit();
// Your once a week code here
}
Я не сторонник этого лучше, чем решение Alarm. Я просто показываю другой подход.