Лучший способ установить повторяющуюся задачу

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

я экспериментировал с таймерами и задачей таймера, но по какой-то причине это не работает, когда я использую с ним класс календаря java, например:

    Calendar c1 = Calendar.getInstance();
          c1.add(Calendar.SECOND, 30);    
  updateTimer.scheduleAtFixedRate(cleanCompletedCache, c1.getTimeInMillis(),hour );

и из того, что я читал, обработчики не подходят для этой многократно повторяющейся задачи. должен ли я использовать диспетчер аварийных сигналов для этого и почему приведенный выше код не будет выполняться правильно? спасибо


person irobotxx    schedule 01.11.2010    source источник
comment
У меня была аналогичная проблема, поэтому я просто использую следующий код, чтобы продолжать устанавливать новые вызовы в определенное время (SHORT_UPDATE_INTERVAL — это переменная, которую я создал, а не системная константа). timer.schedule(new TimerTask() { @Override public void run() { // вызываем здесь процедуры timerEvent(); } }, SHORT_UPDATE_INTERVAL);   -  person Jim    schedule 02.11.2010
comment
спасибо проверил бы этот метод. но я думаю, что я также видел способ сделать это с обработчиками. Спасибо, в любом случае   -  person irobotxx    schedule 02.11.2010


Ответы (1)


Вам нужен AlarmManager и его вызовы setRepeating или setInexactRepeating.

Там вы планируете доставку Intent в ваше приложение и пишете приемник намерений для его обработки. Таким образом, за активацию вашего приложения полностью отвечает система Android, и вашему приложению не нужно работать в течение всего часа, пока оно просто ждет активации.

Если по какой-то странной причине вам нужно, чтобы ваш код работал между вызовами таймера, вам нужно поддерживать работу фоновой службы, но вы все равно будете использовать AlarmManager для пробуждения.

person Nakedible    schedule 07.05.2011