gpt4 book ai didi

android - 哪个值具有更高的优先级,updatePeriodMillis 或与警报关联的值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:26:20 25 4
gpt4 key购买 nike

我知道参数 updatePeriodMillis 决定了一个应用程序 widget 根据 widgetproviderinfo.xml 中的规范更新的频率/资源/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。所以问题是关于电池消耗如果间隔非常小,这是一个主要问题。

但是,如果您需要更频繁地更新和/或您不需要在设备休眠时更新,那么您可以改为根据警报执行更新,该警报将不唤醒设备。为此,请使用 AlarmManager 为您的 AppWidgetProvider 接收的 Intent 设置一个警报。将警报类型设置为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,则哪个值优先?指定为警报或 updatePeriodMillis 的一部分的值?

最佳答案

它们都将触发 onUpdate() 调用。

如果您将闹钟设置为 20 分钟,并将 updatePeriodMillis 设置为 30 分钟。

然后将您的小部件 放在主屏幕上。 20 分钟后,警报将触发 onUpdate 被调用(实际上可以是您选择的任何其他函数)。然后 10 分钟后(从小部件放置在屏幕上起总共 30 分钟),updatePeriodMillis 将触发 onUpdate()。然后 10 分钟后(小部件放置在屏幕上后 40 分钟),警报将触发另一个 onUpdate()。最后 20 分钟后(小部件放置在屏幕上后 60 分钟)updatePeriodMillis 将触发另一个 onUpdate()

关于android - 哪个值具有更高的优先级,updatePeriodMillis 或与警报关联的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24443115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com