Главная » Разработка для Android » Использование механизма Сигнализации

0

Сигнализацию можно назвать  компромиссом между двумя  подходами, описанными выше.

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

Использование Сигнализации для обновления виджетов  похоже на ис- пользование ранее описанной  модели, в основе которой  лежат Намерения. Добавьте  новый Фильтр намерений в секцию вашего виджета  в манифесте и переопределите обработчик  onReceive, чтобы определять  Намерение, ко- торое его вызвало. Используйте AlarmManager внутри вашего приложения, чтобы создать Сигнализацию, которая активизирует Намерения при осущест- влении определенного действия.

Благодаря гибкости механизм  Сигнализации имеет преимущество перед простой установкой  минимальной частоты обновления.

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

Отличие в том, что, устанавливая режимы RTC или ELAPSED_REALTIME

при создании  Сигнализации, вы можете настроить  ее таким образом, чтобы

она срабатывала только в том случае, если устройство не нуждается в «про- буждении»:

larmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, AlarmManager.INTERVAL_HOUR, AlarmManager.INTERVAL_HOUR, pi);

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

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

String alarmService = Context.ALARM_SERVICE;

AlarmManager alarmManager = (AlarmManager)getSystemService(alarmService);

Intent intent = new Intent(MyAppWidget.FORCE_WIDGET_UPDATE); PendingIntent pi = PendingIntent.getBroadcast(this,

0, intent,

0);

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, AlarmManager.INTERVAL_HALF_DAY, AlarmManager.INTERVAL_HALF_DAY,

pi);

Как уже описывалось в главе 9, при неточном повторении  Сигнализация оптимизирует свои срабатывания, сдвигая все запланированные события на один и тот же момент времени. Благодаря этому устройство  «проснет- ся» только один раз, вместо того чтобы неоднократно  выходить из режима ожидания  в течение нескольких  минут.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии