哪个值具有更高的优先级,updatePeriodMillis或与Alarm相关联的值?

use*_*020 5 android anti-patterns

我知道该参数根据/ res/xml中的规范updatePeriodMillis确定应用程序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>
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点在于,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);
Run Code Online (Sandbox Code Playgroud)

所以我的问题如下:假设AlarmManager用于执行更新.此外,如果在widgetproviderinfo.xml,updatePeriodMillis是不是设置为0时,将价值将采取优先?作为Alarm或updatePeriodMillis的一部分指定的值?

Tik*_*boy 5

它们都会触发一个onUpdate()电话.

如果您在20分钟和updatePeriodMillis30分钟设置闹钟.

然后你把你widget放在主屏幕上.20分钟后,闹钟将触发一个onUpdate被叫(可以是您实际选择的任何其他功能).然后10分钟后(总共自从小部件放在屏幕上30分钟),updatePeriodMillis将触发一个onUpdate().然后10分钟后(自小部件放置在屏幕上40分钟后),闹钟将触发另一个onUpdate().最后20分钟后(自小部件放置在屏幕上60分钟后)updatePeriodMillis将触发另一个onUpdate().