Android: Как использовать AlarmManager

Метод статичен потому что иначе была бы неоднозначность: какого конструктора нужно вызвать? Особенно, если Ваш класс похож на это:

public class JavaClass{
  protected JavaClass(int x){}
  public void main(String[] args){
  }
}

JVM должна звонить new JavaClass(int)? Что это должно передать для x?

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

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

я понятия не имею, почему main всегда отмечается public все же.

87
задан Creos 19 June 2016 в 17:36
поделиться

1 ответ

"Пример кода" не так прост, когда дело касается AlarmManager .

Вот фрагмент, показывающий настройку AlarmManager :

AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);

mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);

В этом примере я использую setRepeating () . Если вам нужен однократный сигнал тревоги, вы должны просто использовать set () . Убедитесь, что время срабатывания сигнала тревоги задано на той же временной основе, что и в начальном параметре set () . В моем примере выше я использую AlarmManager.ELAPSED_REALTIME_WAKEUP , поэтому моя временная база составляет SystemClock.elapsedRealtime () .

Вот более крупный пример проекта , показывающий эту технику .

106
ответ дан 24 November 2019 в 07:46
поделиться
Другие вопросы по тегам:

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