Делать что-то каждый день [дублировать]

$ dbc возвращает false. В вашем запросе есть ошибка:

  Пользователь SELECT. *, Профиль. * - Вы не присоединяетесь к профилю в любом месте.  FROM users INNER JOIN contact_info ON contact_info.user_id = users.user_id WHERE users.user_id = 3 ");  

Исправление для этого вообще описано Raveren.

40
задан JJJ 3 June 2012 в 16:46
поделиться

3 ответа

Да, вам нужно посмотреть на AlarmManager , чтобы настроить повторный «Тревога». Это лучше для аккумулятора на устройстве, так как в отличие от обслуживания он не работает постоянно в фоновом режиме. Тревога запускает приемник вещания , который будет выполнять ваш пользовательский код.

В качестве окончательной заметки - есть значения перечислимого времени для синхронизации сигнала тревоги, включая ежедневные, половинные сутки и многие другие хотя вы можете просто установить фактическое значение.

Хороший пример можно найти в следующем сообщении SO:

Пример диспетчера аварийных сигналов

Обновить

Новые функции были добавлены в Android. Если вы читаете это, я бы посоветовал вам теперь взглянуть на GcmNetworkManager . Это оптимизирует время работы от батареи и работает до леденца. Для Lollipop вы можете использовать JobScheduler . Я бы посоветовал использовать эти классы над AlarmManager.

49
ответ дан Community 16 August 2018 в 04:41
поделиться
  • 1
    Спасибо, это именно то, что я искал. – siemian 23 December 2011 в 13:45
  • 2
    @Graham Smith Из интереса вы сами писали? – Jake Graham Arnold 30 April 2013 в 09:04
  • 3
    @Graham Smith Ссылка, которую вы предоставили, сломана. Можете ли вы предоставить рабочую ссылку? – Zapnologica 7 October 2013 в 22:45
  • 4
    @ Zapnologica В настоящее время есть хороший пример SO - моя ссылка работала во время публикации. Надеюсь это поможет – Graham Smith 8 October 2013 в 12:06
  • 5
    Я думаю, что теперь правильный инструмент для этой задачи смещается в сторону GcmNetworkManager . – surlac 29 February 2016 в 19:17

В качестве альтернативы я сравниваю текущую неделю:

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. Я просто показываю другой подход.

6
ответ дан aldux 16 August 2018 в 04:41
поделиться

Я думаю, что лучше всего подходит GcmNetworkManager . В основном у него есть все, что вам нужно от AlarmManager плюс настойчивость, поэтому после перезагрузки можно продолжить выполнение.

Пример:

PeriodicTask task = new PeriodicTask.Builder()
        .setService(MyTaskService.class)
        .setTag(TASK_TAG_PERIODIC)
        .setPeriod(5L)
        .build();

mGcmNetworkManager.schedule(task);
13
ответ дан surlac 16 August 2018 в 04:41
поделиться
  • 1
    Вы правы - это, вероятно, станет нормальным способом сделать это. Я написал свой ответ 2,5 года назад, так что все идет дальше. Я бы сказал, что вам нужно добавить о Lollipop Job Scheduler для Android 5+, так как вам не нужно использовать GcmNetworkManager. Я поддержал кстати. – Graham Smith 29 February 2016 в 23:41
Другие вопросы по тегам:

Похожие вопросы: