我了解参数updatePeriodMillis
根据/ res / xml中存在的widget
中的规范确定应用widgetproviderinfo.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”)。至
代码看起来像这样:
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 NOT 设置为0,那么 哪个值优先?作为Alarm或updatePeriodMillis?
的一部分指定的值答案 0 :(得分:5)
它们都会触发onUpdate()
来电。
如果您在20分钟和updatePeriodMillis
到30分钟设置闹钟。
然后你将widget
放在主屏幕上。 20分钟后,警报将触发onUpdate
被调用(可以是您实际选择的任何其他功能)。然后10分钟后(总共在屏幕上放置小部件后30分钟),updatePeriodMillis
将触发onUpdate()
。然后10分钟后(自小部件放置在屏幕上40分钟后),闹钟将触发另一个onUpdate()
。最后20分钟后(自小部件放置在屏幕上60分钟后)updatePeriodMillis
将触发另一个onUpdate()
。
答案 1 :(得分:2)
来自android DOC: 注意:updatePeriodMillis请求的更新不会每30分钟发送一次。 [在此输入链接描述] [1] http://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo.html#updatePeriodMillis
所以基本上如果你将updatePeriodMillis设置为低于1800000,android将不会调用你的onUpdate方法直到30分钟