Я понимаю, что параметр updatePeriodMillis
определяет, как часто приложение widget
обновляется в соответствии со спецификацией в widgetproviderinfo.xml
в /res/xml.
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:configure="com.example.appwidget.ConfigurationActivity"
android:initialLayout="@layout/layout_appwidget_large"
android:minHeight="115dp"
android:minWidth="250dp"
android:updatePeriodMillis="1800000" ><!-- 30mins -->
</appwidget-provider>
Недостаток этого подхода состоит в том, что он обновляет widget
, пробуждая телефон через заданный интервал, если телефон находится в спящем режиме. Таким образом, проблема заключается в потреблении батареи, что является серьезной проблемой, если интервал очень мал.
Однако если вам нужно обновлять чаще и/или вам не нужно обновлять, когда устройство находится в спящем режиме, вы можете вместо этого выполнять обновления на основе сигнала тревоги, который не будет будить устройство. Для этого установите будильник с Intent
, который ваш AppWidgetProvider
получит, используя AlarmManager
. Установите тип будильника на ELAPSED_REALTIME или RTC, который будет доставлять будильник только тогда, когда устройство не спит. Затем установите updatePeriodMillis
на ноль ("0"). to Код будет выглядеть примерно так:
final Intent intent = new Intent(context, UpdateService.class);
final PendingIntent pending = PendingIntent.getService(context, 0, intent, 0);
final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pending);
long interval = 1000*60;
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pending);
Итак, мой вопрос заключается в следующем: допустим, для обновления используется AlarmManager. Кроме того, если в файле widgetproviderinfo.xml для параметра updatePeriodMillis НЕ установлено значение 0, какое значение будет иметь приоритет? Значение, указанное как часть Alarm или updatePeriodMillis?